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

时间:2015-06-26 05:13:24

标签: c# c++ .net-4.5 intptr

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&#34 ;; 在互联网上搜索后,我发现了类似的东西。

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

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

任何帮助或建议?

1 个答案:

答案 0 :(得分:1)

要传递BSTR,您可以执行以下操作:

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

然后直接传递string而不做任何事情。

请注意,在CustomConvert中,您不得释放BSTR,因为它是由C#“拥有”的。