简单的问题:请问如何用SendMessage API函数在两个进程之间传递字符串?

del 2000-10-25 06:02:00
...全文
221 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CoolHg 2000-10-26
  • 打赏
  • 举报
回复
-
del 2000-10-26
  • 打赏
  • 举报
回复
成功了!非常感谢各位大哥帮助,由于我的分数已经......,所以只有意思一下了,抱歉!
prodigy 2000-10-26
  • 打赏
  • 举报
回复
进程间传递指针要出错的,因为他们有自己的4G进程空间,这里的指针在另一个进程中不是有效的
andygood 2000-10-25
  • 打赏
  • 举报
回复

如果非要使用SendMessage的话,使用WM_COPYDATA几乎是最简单而可行的方法。如果你不使用WM_COPYDATA的话,请使用共享内存映射文件,否则会执行非法操作。

另外,如果是改变窗口的标题之类的标准文本操作的话(通常使用WM_SETTEXT等),因为Windows会自动在进程之间进行内存拷贝(因为可以使用strlen来得到字符串的大小),所以可以直接使用,就像是在同一个进程内。
土豆 2000-10-25
  • 打赏
  • 举报
回复
你可以用WM_COPYDATA消息捎带数据啊,如下:
COPYDATASTRUCT cds;
char msg[100]="Test Message";
cds.cbData =100;
cds.lpData = (LPBYTE)msg;
SendMessage(hDestWnd, WM_COPYDATA, (WPARAM)hSourceWnd, (LPARAM)&cds);

绝对OK。
joke100 2000-10-25
  • 打赏
  • 举报
回复
好象还没有现成的消息吧.

不过可以用自定义消息
UINT uMyStringMsg = RegisterWindowMessage(TEXT(TransportString));

在进程内你要传送字符串的地方调用
SendMessage(HWND_BROADCAST, uMyStringMsg, 0, "需传递的字符串");

在另一个进程的消息处理函数中
switch (message)
{
.......
case WM_COMMAND:
switch (wParam)
{
default :
if (message == uMyStringMsg)
str = CString(*lParam);
}
}

先自定义一个消息,将要传送的字符串放在lParam参数中,以广播的方式或直接送给目标进程,在目标进程中对此自定义消息做处理,取出传来的字符串即可.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧