Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将C方法中的字符串返回到输出参数中的C++函数_C#_C++_Marshalling_Com Interop_Variant - Fatal编程技术网

C# 将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++中应该使用什么变体类型,它对应

我从C++函数调用C方法。< /P> C方法应执行以下操作:

分配BSTR并将其返回到输出参数中的C++函数 通过返回值将HESREST返回到C++函数 我实现了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列。