我想使用Array
(
[0] => 0
[1] => 2
[2] => 1
)
在Windows应用程序之间发送一个简单的字符串消息(Windows的数据复制IPC机制)。我正在使用JNI在C中编写WinAPI代码。
在这个阶段,我只是简单地在接收应用程序中打印出消息。目前,它只打印出 null 。我怀疑是因为WM_COPYDATA
没有被初始化。但我不知道如何使用lParam
从lParam
中提取数据。
非常感谢任何建议的解决方案。正如您所见,我是WinAPI的新手。
我目前有以下代码:
发送代码:
COPYDATASTRUCT
接收代码:
HWND hwnd = 0;
LPCTSTR lpszString = "A message";
COPYDATASTRUCT cds;
cds.dwData = 1;
cds.cbData = sizeof(TCHAR) * (_tcslen(lpszString) + 1);
cds.lpData = (TCHAR*)lpszString;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);
return 0; // success
答案 0 :(得分:2)
您正在发送一个值为0的窗口句柄。您必须提供一个有效的窗口句柄而0不是。
其他一些评论:
TCHAR
,但您的代码只能编译为ANSI。除非您以Windows 98为目标,否则请勿使用TCHAR
。使用Unicode。 cbSize
个字节。如果发件人不是您期望的,这可以防止缓冲区溢出。 dwData
视为验证发件人是否符合您预期的方法。 wParam
而不是收件人传递。 if (WM_COPYDATA)
毫无意义。条件在编译时计算为true。 查看您的代码,您创建任何窗口都不是很明显。您需要一个窗口来接收消息。也许这是你问题的根源。由于您没有提供MCVE,因此很难更精确。