(三)Win32进程通信 —— 数据复制消息
程序员文章站
2022-04-02 23:18:02
...
数据复制通信,顾名思义就是将数据进行复制
我们需要认识一个结构体来完成数据复制:
typedef struct tagCOPYDATASTRUCT
{
ULONG_PTR dwData;
DWORD cbData;
Field_size_bytes(cbData) PVOID lpData;
}
COPYDATASTRUCT, *PCOPYDATASTRUCT;
—
细心的小伙伴应该观察到了里面有个成员 PVOID lpData,这意味着什么呢?
我们可以将大量的数据都进行复制,这是完全没有问题的
案例效果演示:
服务端窗口及功能实现步骤:
-
搭建窗口界面,并为控件设置自定义ID:
-
为编辑框添加变量:
3. 双击发送按钮实现发送数据功能:
CWnd* cWnd = CWnd::FindWindow(NULL, _T("datarecv")); // 查找窗口
if(cWnd == NULL)
{
MessageBox(TEXT("no find windows."));
return;
}
UpdateData(TRUE); // 更新到最新的数据到变量中
COPYDATASTRUCT cd; // 定义复制数据结构体
cd.cdData = m_CopyData.GetLength() * sizeof(TCHAR); // 保存的是字节
cd.dwData = 0; // 可加可不加
cd.lpData = m_CopyData.GetBuffer(cd.cbData); // 指向我们需要的数据的缓存
cWnd->SendMessage(WM_COPYDATA, NULL, (LPARAM)&cd); // 发送消息,将cd当做参数
服务端已经写好,接下来写客户端
客户端窗口及功能实现步骤:
- 搭建窗口界面,并为控件设置自定义ID:
- 为编辑框添加变量:
- 为窗口添加消息(WM_COPYDATA):
- 写这个消息的代码:
m_CopyData = (LPTSTR)pCopyDataStruct->lpData; // 获取数据
// 截取范围,否则会有许多垃圾数据
m_CopyData = m_CopyData.Left(pCopyDataStruct->cbData / sizeof(TCHAR));
UpdateData(FALSE); // 将数据更新到控件中
如此,我们的程序就写好了
作者:浪子花梦
Time:2020.02.14
情人节快乐,各位
上一篇: _asm int 3 软件中断
下一篇: mysql常用命令