如果我用这样的东西调用我的 COM 方法
d.someMethod(string, doule, ref string);
我收到上面提到的错误。 调用的方法是这样的
STDMETHODIMP SomeClass::someMethod(BSTR, DOUBLE, BSTR*)
只要我不给 BSTR* 赋值,它就可以正常工作。
编辑:IDL 描述
interface IDistanceClass : IDispatch{
[id(1), helpstring("some helpstring")] HRESULT someMethod([in] BSTR firstarg, [in] DOUBLE secondarg, [in,out] BSTR* returnme);
};
EDIT2:只要我只传递 1 个字符,如 *returnme = "T",它就可以正常工作。但是当它需要是一个字符串时它会抛出,即使我将一个指针分配给一个字符串我也会得到一个错误。
最佳答案
在你们帮助我之后,解决方案非常简单:-) 事实证明我需要做这样的事情:
string someString = "TestME";
_bstr_t s(someString.c_str());
*returnme = SysAllocString((BSTR)s);
对我来说效果很好。
我正在亲自回答这个问题,这样也许遇到这个问题的其他人就不需要再搜索了。 希望这也会对其他人有所帮助。
关于c# - 尝试从 COM 组件传递 BSTR* 时 C# 中的 MarshlDirectiveException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879038/