WinCE应用程序中实现进程间通信的方式有很多种,比如说:剪贴板、命名管道、匿名管道、邮槽、共享内存、文件映射、Socket等等,其中最简单的一种应该是
WM_COPYDATA消息,现写一个小例,以做备忘:
现有两个程序A和B,A做为发送数据方,B做为接收数据方。
A(发送端)程序中的程序片段如下:
HWND hwnd = ::FindWindow(NULL, _T("B"));
if (NULL == hwnd)
{
MessageBox(NULL, _T("没有找到程序B"), _T("提示"), NULL);
}
char *buf = new char[10];
memset(buf, 0, 10);
sprintf_s(buf, 10, "%s", "Hello");
COPYDATASTRUCT cds;
ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
cds.dwData = 0;
cds.cbData = 10;
cds.lpData = (PVOID)buf;
::SendMessage(hwnd, // hwnd为接收消息的目标窗口句柄
WM_COPYDATA,
NULL/*(WPARAM)hWnd*/,//可以是NULL或者发送消息的窗口句柄
(LPARAM)&cds);//COPYDATASTRUCT结构体指针
delete []buf;
B(接收端)程序片段如下:
case WM_COPYDATA:
{
MessageBox(NULL, _T("B程序收到消息 WM_COPYDATA"), _T("提示"), NULL);
COPYDATASTRUCT *pcds = (COPYDATASTRUCT *)lParam;
printf("pcds->cbData is :%d\n", pcds->cbData);
printf("pcds->lpData is :%s\n", (char *)pcds->lpData);
}