VC跨进程数据(结构体)传递-WM_COPYDATA
生活随笔
收集整理的這篇文章主要介紹了
VC跨进程数据(结构体)传递-WM_COPYDATA
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
兩個(gè)測(cè)試程序,都是MFC基于對(duì)話框的應(yīng)用程序,一個(gè)是發(fā)送者,一個(gè)是接收者。
兩個(gè)程序都使用同一個(gè)結(jié)構(gòu)體:
typedef struct {char imsi[20];char options[512]; }_tagResult;發(fā)送者:
按鈕點(diǎn)擊事件:
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()} }接收者就是一個(gè) WM_COPYDATA的實(shí)現(xiàn)函數(shù): 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); }
完成了上面的工作就可以測(cè)試了,只要點(diǎn)擊發(fā)送者的按鈕,接收端就可以接收到發(fā)過(guò)來(lái)的消息了。
注意:發(fā)送WM_COPYDATA消息時(shí),必須使用SendMessage,不能使用PostMessage,否則接收端會(huì)收不到消息的。
總結(jié)
以上是生活随笔為你收集整理的VC跨进程数据(结构体)传递-WM_COPYDATA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《深入理解Hadoop(原书第2版)》—
- 下一篇: 理解C/C++运行时库