尝试从COM组件传递BSTR *时C#中的MarshlDirectiveException

时间:2012-12-14 12:49:30

标签: c# c++ com bstr

如果我用这样的东西调用我的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:只要我只传递一个像* returnme =“T”这样的字符就行了。但是当它需要成为一个字符串时它会抛出,即使我指定一个指向字符串的指针我也会收到错误。

1 个答案:

答案 0 :(得分:0)

在你帮助我之后解决方案很简单:-) 事实证明我需要做这样的事情:

string someString = "TestME";
_bstr_t s(someString.c_str());
*returnme = SysAllocString((BSTR)s);

适合我。

我自己也在回答这个问题,以便其他有此问题的人不再需要再搜索。 希望这也有助于其他人。