文件内存映射 DLL共享 WM_COPYDATA

本文介绍了进程间通讯的多种方法,重点讲解了WM_COPYDATA消息传递、共享DLL以避免数据拷贝以及内存映射文件的详细过程。通过内存映射,不同进程可以同时读写同一块内存区域,实现高效的数据共享。文章还提到了相关API函数的使用,如CreateFileMapping、MapViewOfFile等,并提供了示例代码。
摘要由CSDN通过智能技术生成

进程之间通讯的手法:
- WM_COPYDATA
- 共享DLL
- 内存映射
- socket
- 管道
- 邮件槽
1 WM_COPYDATA
有两份数据拷贝:第一次发送到操作系统高2GB共享区,然后再拷贝到目标进程的地址空间,适用于数据量不大的场合

//COPYDATASTRUCT原型
typedef struct tagCOPYDATASTRUCT { 
    ULONG_PTR dwData;     // 数据类型,接受方可将其作为判别依据
    DWORD     cbData;     // lpData指向的数据块的大小,即发送数据大小
    PVOID     lpData;     // 数据块首地址
} COPYDATASTRUCT, *PCOPYDATASTRUCT;

//API原型
SendMessage( 
              (HWND) hWnd,      // handle to destination window 
              WM_COPYDATA,      // message to send
              (WPARAM) wParam,  // handle to window (发送方的窗口句柄)
              (LPARAM) lParam   // data (PCOPYDATASTRUCT)(结构体指针)
);

示例:

//进程1.cpp
HWND hWnd = ::FindWindow(NULL, "接收方窗口名");
//1.定义要发送的数据
char szBuf[64] = "Hello Feature!";
//2.定义结构体参数
COPYDATASTRUCT cpd;
cpd.dwData = WM_USER+123;
cpd.cbData = 64;
cpd.lpData = szBuf;
//3.向目标窗口发送消息
::SendMessage( hWnd,
               WM_COPYDATA,
               (WPARAM)this->GetSafeHwnd(),
               (LPARAM)&cpd);
//进程2.cpp
//4.剩下的由接收方负责写WM_COPYDATA的消息响应函数,pCopyDataStruct->dwData参数可以作为一种判断依据;
OnCopyData(CWnd*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值