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

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

本文关键字:dll 字符串 C++COM 函数      更新时间:2023-10-16
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);

但我得到的异常"字符串"无法转换为"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);

然后在不做任何事情的情况下直接通过CCD_ 2。

请注意,在CustomConvert中,您不能释放BSTR,因为它由C#"拥有"。