-2

我有两个可执行文件。我想用一个从另一个获取字符串。换句话说,我想做一个进程间通信。我在WndProc中使用(char*)lParam
尝试了SendMessage。但是,它不起作用。(char*)lParam产生运行时错误。 这是我的代码的一部分: SendMessage 的发送者:


string s="12345";
SendMessage(hwnd,M_WR_SHELL,0,(LPARAM)s.c_str());


SendMessage 的接收者(在 WndProc 中):

case M_WR_SHELL: {
    string s;
    s=(char*)lParam;
    MessageBox(NULL, s.c_str(),"THAT'S GOOD'",MB_OK);
    return 0;
}


我搜索了这个问题。一些答案就像“它们不共享相同的内存空间”。但是,我不知道如何处理它。
如果使用SendMessage不正确,我该怎么做?

PS:我正在使用 TDM-GCC,不想使用 MFC 甚至 VC++。如果可能的话,请不要通过他们给我解决方案。;p

谢谢,
W. Xie

4

2 回答 2

0

您需要使用共享内存。我建议使用 WM_COPYDATA 而不是用户定义的消息。WM_COPYDATA 只能通过 SendMessage() 或 SendMessageTimeout() 发送,Windows 将负责将数据复制到接收进程地址空间。

于 2018-06-02T09:49:07.873 回答
0

您必须通过文件映射函数使用 WM_COPYDATA(最简单的)或共享内存。我自己的USM 可能会有所帮助,但通常您需要在 IPC 机制上投入更多时间,因为您似乎来自另一个操作系统(因此有关于 Visual Studio 的注释)。Windows 中的 IPC 不是一项简单的任务。

于 2018-06-02T09:55:43.890 回答