使用SendMessageW函数我将c#字符串作为参数传递给c ++函数。我正在用c ++将类型转换为CString,但是它的值为空。请检查以下代码并提供解决方案
----------------------- c#代码------------------
public unsafe IntPtr Testing()
{
string string_aux = "Stringtochange";
void* pt = Marshal.StringToBSTR(string_aux).ToPointer();
IntPtr ab = new IntPtr(pt);
return ab;
}
public void GetValue()
{
SendMessageW(utilityHandle1, TVM_GETITEMHEIGHT, handle,Testing());
}
--------------------- C ++代码--------------
CString *st = (CString*)lParam;
MessageBox(NULL,*st,L"stringvalue",NULL);
* st值是空的。
你似乎在虐待TVM_GETITEMHEIGHT
。为什么不使用自定义消息。
CString
是C ++类。与二进制不兼容BSTR
。
我个人将Marshal.StringToCoTaskMemUni
在C#中使用并转换wchar_t*
为C ++。请记住,在SendMessageW
返回时使用了非托管内存后,请通过调用销毁它Marshal.FreeCoTaskMem
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句