windows API sendmessage 怎么传递字符串参数?

本文介绍了如何在Windows进程中使用WM_COPYDATA消息类型来实现字符串的跨进程传递,涉及COPYDATASTRUCT结构的使用和底层机制——文件映射。重点在于解决进程间通信问题,并强调了WM_COPYDATA的适用性和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题 跨进程 通过sendmessage 怎么传递字符串?

开始我想到的是 自定义消息类型 + 参数(字符串)就好了

这是msdn 给出的sendmessage的定义

LRESULT SendMessage(
  [in] HWND   hWnd,
  [in] UINT   Msg,
  [in] WPARAM wParam,
  [in] LPARAM lParam
);

窗口句柄MSG 消息类型

完蛋 貌似不行, 因为是跨进程,这样传一个字符串地址的是不行的
那怎么传字符串呢?

后面了解到 WM_COPYDATA ,msdn 的定义

在这里插入图片描述

要怎么用呢?

下图代码片段来源于 https://www.cnblogs.com/ein-key5205/p/3597427.html

在这里插入图片描述

消息接收方
在这里插入图片描述

这样就可以了。

还有了解到 这个WM_COPYDATA 进程间通信,
SendMessage(WM_COPYDATA)底层是通过文件映射(File Mapping)完成的,大概流程是发送方线程根据COPYDATASTRUCT结构体中的传递数据信息,在共享内存中进行数据复制,接收方线程则会到共享内存中读取数据进行处理。

有一点的限制 只能用于 sendmessage , postmessage不可以
因为异步塞入队列后,会使这内容端失效 导致错误,具体我也没看 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值