我正在从C++函数调用C#方法。
C# 方法应执行以下操作:
- 分配
BSTR
并将其返回到输出参数中的C++函数 - 通过堆栈向C++函数返回
HRESULT
(通过返回值)
我按如下方式实现了 C# 方法:
int Method(out IntPtr output)
{
int status = 0;
...
output = Marshal.StringToBSTR(someString);
...
return status;
}
问题:
- 我应该在 C++ 中使用什么变体类型,它对应于 C# 中的
out IntPtr
类型? - C# 中是否有其他类型可供我改用,以便返回
BSTR
? - 如果是,那么它是什么 C# 类型,对应的C++变体类型是什么?
我已经尝试了此处列出的几种变体类型,但似乎都不起作用。
您正在使用 COM 可调用包装器来回答您的问题:
-
C#
out IntPtr
映射到 COM 数据类型中的void**
。
默认情况下,C# 字符串类型在 COM 中封送为 BSTR 类型,请检查字符串的默认封送处理,以便您可以在 C# 中使用字符串
- BSTR 的变体类型是VT_BSTR,但如果只处理字符串,则可以只处理 BSTR,不需要使用变体类型。