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

标签 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:只要我只传递 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/

相关文章:

c++ - 类里面不能有自己类型的常量?

c# - 如何使用HttpClient认证发帖

c# - 编译 32 位和 64 位时的巨大性能差异(快 26 倍)

c# - wpf 中的自定义命令

.net - VBA 中 .NET 的 System.Convert 的替代方案

c++ - 调用 COM Release() 函数后指针是否应该设置为空?

COM - 如何创建返回接口(interface)指针的方法?

c# - 使用MVVM动态创建的WPF布局

C++ 默认参数 - 声明

c++ - 使用 `const T &` 持有 Temporary 可以解决什么问题?