使用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
不二进制兼容。
我个人将在C#中使用Marshal.StringToCoTaskMemUni
并在C ++中转换为wchar_t*
。请记住,在SendMessageW
返回时使用完非托管内存后,请通过调用Marshal.FreeCoTaskMem
销毁它。
关于c# - 当我们使用Winapis将字符串作为参数传递时,如何将C#字符串转换为C++字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33252188/