从 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#。
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#。