使用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/

10-11 22:56
查看更多