从 C# 函数在 C++ COM dll 中传递字符串

Pass String in C++ COM dll from C# function

dll的函数接口;

我认为 dll 函数看起来像,数据类型为 BSTR

CustomConvert(BSTR dataStr)

{........}

dll 接口:

CustomConvert(IntPtr dataStr)    //Returns strings

我需要传递的数据是这样的:

string strTemp = "pŒ®í§…Êtf°B²bßZÃQô"; // something like this
obj.CustomConvert(strTemp);

但我收到异常 "string" cannot convert to "System.IntPtr"; 在网上搜索后,我发现了这样的东西。

obj.CustomConvert(System.Runtime.InteropServices.Marshal.StringToBSTR(strTemp));

但是System.Runtime.InteropServices.Marshal.StringToBSTR(strTemp) 将strTemp 转换为数字,如2035295。但我需要在strTemp 中传递实际值。

有什么帮助或建议吗?

要传递 BSTR 你可以这样做:

public static extern void CustomConvert([MarshalAs(UnmanagedType.BStr)] string dataStr);

然后什么都不做直接传string

请注意,在 CustomConvert 中,您不能释放 BSTR,因为它是 "owned" 的 C#。