将C ++字符串发送到C#字符串。 互操作

我是跨流程沟通的新手,需要一些帮助。 我希望能够将C ++程序中的字符串发送到C#程序。 我的问题是结果字符串是乱码。 这是我的代码:

发送程序(C ++):

void transmitState(char* myStr) { HWND hWnd = ::FindWindow(NULL, _T("myApp v.1.0")); if (hWnd) { COPYDATASTRUCT cds; ::ZeroMemory(&cds, sizeof(COPYDATASTRUCT)); cds.dwData = 0; cds.lpData = (PVOID) myStr; cds.cbData = strlen(myStr) + 1; ::SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds); } } 

接收程序(C#)(我已经覆盖了WndProc):

 private void OnCopyData(ref Message m) { COPYDATASTRUCT cds = new COPYDATASTRUCT(); cds = (COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(COPYDATASTRUCT)); String myStr; unsafe { myStr = new String((char*) cds.lpData); } label1.Text = myStr; } 

C ++中的char *是ANSI字符串(通常每个字符一个字节),C#中的char *是Unicode字符串(如WCHAR * – 每个字符两个字节)。

你实际上是从char *到WCHAR *的reinterpret_cast。 这不行。 在C ++端使用MultiByteToWideChar()进行转换。

您在C ++中的字符串是ANSI。 您需要在C#的某处转换为Unicode。 我做了互操作已经有几年了,所以其他人必须告诉你到底该怎么做。

您必须以某种方式将字符数组从ASCII转换为Unicode。 这是一个可以帮助从C#端进行操作的页面 。