当我们使用winapis传递字符串作为参数时,如何将c#字符串转换为c++字符串
本文关键字:字符串 c++ 转换 参数 winapis 我们 | 更新日期: 2023-09-27 18:18:46
使用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
来销毁它。