我是进程间通信的新手,需要一些帮助。我希望能够将字符串从 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() 进行转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)