现在有个需求需要在两进程间大量传递数据,而在windows程序下两个进程间进行通信 可以有多个方法:
1、管道(未命名管道、命名管道)
2、共享内存
3、消息队列
不过上述实现起来比较麻烦,现在我们来讲解如何使用sendMessage来传输大量数据。
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
sendmessage如上所述,可以知道其中wParam 以及lParam两个参数可以传递少量数据,要用来传递大量数据,我们只需要把Msg变量指定为WM_COPYDATA就可以了。
其中WM_COPYDATA传递的是一个结构体数据为:
typedef struct tagCOPYDATASTRUCT {
ULONG_PTR dwData;//一个整数,可以用来充当标识
DWORD cbData;//lpData大小
PVOID lpData;//要传输的数据
} COPYDATASTRUCT, *PCOPYDATASTRUCT;
为了我们可以在接收端容易处理传递的大量数据。我们可以传输一个规范化的结构体,然后再赋值给lpData成员变量。
例如我们可以定义一个一般的结构体数据(主要要规划好结构体的成员变量):
typedef struct __MessageContent
{
DWORD dwAttribute;
BOOL bDisplay;
BOOL bTrim;