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,否则接收端会收不到消息的。
两个程序都使用同一个结构体:
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,否则接收端会收不到消息的。
相关文章推荐
- 用WM_COPYDATA消息来实现两个进程之间传递数据
- 如果在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- 如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- 如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- 用WM_COPYDATA消息来实现两个进程之间传递数据
- 如果在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- [转帖]在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- WM_COPYDATA 进程间传递数据(以字符串为例)
- 如果在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- 用WM_COPYDATA消息来实现两个进程之间传递数据
- [转]如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- WM_COPYDATA 在不同进程间传递数据方式之一
- 用WM_COPYDATA消息来实现两个进程之间传递数据
- 用WM_COPYDATA消息来实现两个进程之间传递数据
- 如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- 进程间通过WM_COPYDATA传递数据
- 如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
- WM_COPYDATA消息机制 不同进程间发送结构体数据
- WM_COPYDATA实现进程间数据共享