扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
HWND hwndClient = GetSafeHwnd(); // 获取服务器所在应用程序的窗口句柄 ATOM atomItem = GlobalAddAtom("Item A"); // 获取原子标识值 if (atomItem != 0) // 向服务器发出数据请求消息 ::PostMessage(m_hwndServer, WM_DDE_REQUEST, (WPARAM)hwndClient, (LPARAM)MAKELONG(CF_TEXT, atomItem)); |
m_hwndServer = hwndServer; // 保存创建的DDE服务窗口 CString sDataItem = "HELLO WORLD!"; // 服务器数据项内容 // 分配DDEDATA格式化的全局共享内存块 m_hDDEData = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, (LONG)sizeof(DDEDATA) + sDataItem.GetLength() + 2); // 锁定内存块地址 DDEDATA * lpDDEData = (DDEDATA*)GlobalLock(m_hDDEData); lpDDEData->cfFormat = CF_TEXT; // 设置格式字段 ::strcpy((LPSTR)lpDDEData->Value, sDataItem); // 填充数据项内容 ::strcat((LPSTR)lpDDEData->Value, "\r\n"); // 添加终结字符 GlobalUnlock(m_hDDEData); // 解锁内存块 |
int ITEM_NUM = 3; // 服务器提供的数据项数目 CString ItemName[3] = {"Item A", "Item B", "Item C"}; // 服务器提供的数据项名 char szItemNameClient[255]; // 客户请求的数据项名 HWND hwndClient = (HWND)wParam; // 客户窗口句柄 short cfFormat = LOWORD(lParam); // 客户传来的数据格式 if (cfFormat == CF_TEXT){ // 格式一致则进入下一步操作 // 取客户请求的数据项名 GlobalGetAtomName(HIWORD(lParam), szItemNameClient, sizeof(szItemNameClient)); for (int i = 0; i < ITEM_NUM; i++){// 检索与服务器提供的哪个数据项匹配 if (strcmp(szItemNameClient, ItemName[i]) == 0) // 如检索到则跳出 break; } ATOM atomItem = GlobalAddAtom(ItemName[i]); // 获取原子标识值 // 若检索到数据项就发送WM_DDE_DATA消息,否则发送WM_DDE_ACK消息 if (i < ITEM_NUM){ LONG lDataPack = PackDDElParam(WM_DDE_DATA, (UINT)m_hDDEData, atomItem); // 组合消息参数lParam ::PostMessage(hwndClient, WM_DDE_DATA, (WPARAM)m_hwndServer, (LPARAM)lDataPack); // 邮寄WM_DDE_DATA消息 } else { DDEACK DDEAck; // 填充DDEACK结构 DDEAck.bAppReturnCode = 0; DDEAck.reserved = 0; DDEAck.fBusy = FALSE; DDEAck.fAck = FALSE; WORD wStatus = *(WORD*)&DDEAck; ::PostMessage(hwndClient, WM_DDE_ACK, (WPARAM)hwndServer, MAKELONG(wStatus, atomItem)); // 邮寄WM_DDE_ACK否定应答消息 } GlobalDeleteAtom(atomItem); // 删除原子 GlobalFree(m_hDDEData); // 释放申请的内存 } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者