C# 将C方法中的字符串返回到输出参数中的C++函数
我从C++函数调用C方法。< /P> C方法应执行以下操作: 分配BSTR并将其返回到输出参数中的C++函数 通过返回值将HESREST返回到C++函数 我实现了C方法,如下所示:C# 将C方法中的字符串返回到输出参数中的C++函数,c#,c++,marshalling,com-interop,variant,C#,C++,Marshalling,Com Interop,Variant,我从C++函数调用C方法。< /P> C方法应执行以下操作: 分配BSTR并将其返回到输出参数中的C++函数 通过返回值将HESREST返回到C++函数 我实现了C方法,如下所示: int Method(out IntPtr output) { int status = 0; ... output = Marshal.StringToBSTR(someString); ... return status; } 问题: C++中应该使用什么变体类型,它对应
int Method(out IntPtr output)
{
int status = 0;
...
output = Marshal.StringToBSTR(someString);
...
return status;
}
问题:
C++中应该使用什么变体类型,它对应C中的输出?
为了返回BSTR,我应该使用C中的其他类型吗?
如果是,那么C是什么类型,以及相应的C++变体类型是什么?
我尝试了列出的几种变体类型,但它们似乎都不起作用。对于您的问题,您正在使用:
C out IntPtr映射到void**in
默认情况下,C字符串类型在COM中封送为BSTR类型,请检查,这样您就可以在C中使用字符串了
BSTR的变量类型是VT_BSTR,但是如果您只处理字符串,您可以只处理BSTR,而不需要使用变量类型。
C++代码使用C DLL作为COM组件吗?或者您正在编写C++/CLI?@Matt:第一个选项。但我不会将BSTR传递给C方法。我正在传递BSTR*,C方法应该将新分配的BSTR的地址写入其中。所以我不能用VT_BSTR来实现这个目的。但是你把Intptr传递出去,它就变成了void**。在C端,除非你有更好的建议,否则我期待Intptr。在调用这个方法时,我应该在C++端使用什么VT?为什么要把BASTBSTR类型转换成C?com。我需要C方法来分配一些字符串,并将其返回给我。这就是为什么我想通过一个BSTR。顺便说一下,您在第二个项目符号中提到的链接表示BSTR*对应的C类型是System.String。很好,我喜欢。但是我假设我应该在C方法中声明字符串,对吗?也许我应该用VT|BSTR | VT|u BYREF?很遗憾,链接中的表没有VT列。