您的位置:首页 > 运维架构

VC跨进程数据(结构体)传递-WM_COPYDATA

2012-12-13 11:15 513 查看
两个测试程序,都是MFC基于对话框的应用程序,一个是发送者,一个是接收者。

两个程序都使用同一个结构体:

typedef struct
{
char imsi[20];
char options[512];
}_tagResult;

发送者



按钮点击事件:

void CCardXSenderDlg::OnButton1()
{
HWND hwnd = ::FindWindow(NULL, "CardXApp");
if(hwnd)
{
static _tagResult result;
static COPYDATASTRUCT sendData;

ZeroMemory(&result, sizeof(_tagResult));
strcpy(result.imsi, "result_imsi0");
strcpy(result.options, "result_options0");

ZeroMemory(&sendData, sizeof(sendData));
sendData.lpData = &result;
sendData.cbData = sizeof(result);

::SendMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&sendData);
// ::PostMessage(hwnd, WM_COPYDATA, NULL, (LPARAM)&sendData); // can't use ::PostMessage()
}
}
接收者就是一个WM_COPYDATA的实现函数:
BOOL CCardXAppDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
CString msg;
_tagResult result;

memcpy(&result, pCopyDataStruct->lpData, sizeof(result));

msg.Format("imsi=[%s], options=[%s]", result.imsi, result.options);
MessageBox(msg);

return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}

完成了上面的工作就可以测试了,只要点击发送者的按钮,接收端就可以接收到发过来的消息了。
注意:发送WM_COPYDATA消息时,必须使用SendMessage,不能使用PostMessage,否则接收端会收不到消息的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: