将字符串从C#方法返回到输出参数中的C ++函数

时间:2015-01-21 17:45:12

标签: c# c++ marshalling com-interop variant

我正在从C ++函数调用C#方法。

C#方法应该执行以下操作:

  • 分配BSTR并将其返回到输出参数
  • 中的C ++函数
  • 通过堆栈(通过返回值)将HRESULT返回给C ++函数

我已经实现了如下C#方法:

int Method(out IntPtr output)
{
    int status = 0;
    ...
    output = Marshal.StringToBSTR(someString);
    ...
    return status;
}

问题:

  • 我应该在C ++中使用哪种变体类型,它对应于C#中的out IntPtr类型?
  • 我应该使用C#中的其他类型,以便返回BSTR
  • 如果是,那么它是什么C#类型,以及相应的C ++变体类型是什么?

我已尝试列出here列出的几种变体类型,但它们似乎都无效。

1 个答案:

答案 0 :(得分:0)

您正在使用COM Callable Wrapper,以解答您的问题:

  1. C#out IntPtr已映射到COM data types中的void**

  2. 默认情况下,C#字符串类型在COM中编组为BSTR类型,请检查Default Marshaling for Strings,这样您就可以在C#中使用字符串

  3. BSTR的变体类型是VT_BSTR,但如果您只处理字符串,则可能只是BSTR,您不需要使用变体类型。