使用WM_COPYDATA在进程之间发送数据

Cha*_*ent 18 c++ windows ipc wm-copydata

我希望在进程之间发送文本.我已经找到了很多这方面的例子,但没有一个我可以开始工作.这是我到目前为止:

发送部分:

COPYDATASTRUCT CDS;
CDS.dwData = 1;
CDS.cbData = 8;
CDS.lpData = NULL;
SendMessage(hwnd, WM_COPYDATA , (WPARAM)hwnd, (LPARAM) (LPVOID) &CDS);
Run Code Online (Sandbox Code Playgroud)

接收部分:

case WM_COPYDATA:
COPYDATASTRUCT* cds = (COPYDATASTRUCT*) lParam;
Run Code Online (Sandbox Code Playgroud)

我不知道如何构建COPYDATASTRUCT,我刚刚提出了一些似乎有用的东西.调试时,执行WM_COPYDATA情况,但我不知道如何处理COPYDATASTRUCT.

我想在这两个进程之间发送文本.

你可能会说我刚刚开始,我在Code :: Blocks中使用GNU GCC编译器,我试图避免MFC和依赖.

Tad*_*mas 21

有关如何使用该消息的示例,请参阅http://msdn.microsoft.com/en-us/library/ms649009(VS.85).aspx.您可能还想查看http://www.flounder.com/wm_copydata.htm.

dwData成员由您定义.您可以将其视为您要定义的数据类型枚举.无论您想用什么来识别数据都是这样的字符串.

cbData成员是指向的数据的大小(以字节为单位)lpData.在您的情况下,它将是字符串的大小(以字节为单位).

lpData成员指向数据要复制.

所以,转移一个字符串....

LPCTSTR lpszString = ...;
COPYDATASTRUCT cds;
cds.dwData = 1; // can be anything
cds.cbData = sizeof(TCHAR) * (_tcslen(lpszString) + 1);
cds.lpData = lpszString;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);
Run Code Online (Sandbox Code Playgroud)

然后,收到它....

COPYDATASTRUCT* pcds = (COPYDATASTRUCT*)lParam;
if (pcds->dwData == 1)
{
    LPCTSTR lpszString = (LPCTSTR)(pcds->lpData);
    // do something with lpszString...
}
Run Code Online (Sandbox Code Playgroud)