如何从 C++ 中的 SendMessage 请求(外部 exe)获取字符串
How to get string from SendMessage request (of a external exe) in c++
我有两个可执行文件。我想用一个从另一个获取字符串。换句话说,我想做一个InterProcess Communication。
我尝试使用 SendMessage (char*)lParam在 WndProc 中。但是,它不起作用。 (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;
}
我搜索了这个问题。有些回答像"They don't share the same memory space."但是,我不知道怎么处理。
如果使用SendMessage不合适,怎么办?
PS:我正在使用 TDM-GCC,不想使用 MFC,甚至 VC++。如果可能的话,请不要通过他们给我解决方案。 ;p
谢谢,
谢伟
您需要使用共享 memory.I 建议使用 WM_COPYDATA 而不是用户定义的消息。 WM_COPYDATA 只能通过 SendMessage() 或 SendMessageTimeout() 发送,Windows 将负责将数据复制到接收进程地址 space。
您必须使用 WM_COPYDATA(最简单)或通过 file mapping functions 共享内存。
我自己的 USM 可能会有所帮助,但通常您需要在 IPC 机制上投入更多时间,因为您似乎来自另一个 OS(因此关于 Visual Studio 的说明)。 Windows 中的 IPC 不是一项简单的任务。
我有两个可执行文件。我想用一个从另一个获取字符串。换句话说,我想做一个InterProcess Communication。
我尝试使用 SendMessage (char*)lParam在 WndProc 中。但是,它不起作用。 (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;
}
我搜索了这个问题。有些回答像"They don't share the same memory space."但是,我不知道怎么处理。
如果使用SendMessage不合适,怎么办?
PS:我正在使用 TDM-GCC,不想使用 MFC,甚至 VC++。如果可能的话,请不要通过他们给我解决方案。 ;p
谢谢,
谢伟
您需要使用共享 memory.I 建议使用 WM_COPYDATA 而不是用户定义的消息。 WM_COPYDATA 只能通过 SendMessage() 或 SendMessageTimeout() 发送,Windows 将负责将数据复制到接收进程地址 space。
您必须使用 WM_COPYDATA(最简单)或通过 file mapping functions 共享内存。 我自己的 USM 可能会有所帮助,但通常您需要在 IPC 机制上投入更多时间,因为您似乎来自另一个 OS(因此关于 Visual Studio 的说明)。 Windows 中的 IPC 不是一项简单的任务。