Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 1991|回复: 4

不同的进程间如何传送字串和数据?不用wm_copydata,因为我的LAZARUS不支持

[复制链接]

该用户从未签到

发表于 2014-7-6 12:59:19 | 显示全部楼层 |阅读模式
不同的进程间如何传送字串和数据?不用wm_copydata,因为我的LAZARUS不支持
var
str2Char;
str3:array [0..100] of char;
str2:=PChar('你好吗');
StrCopy(str3,str2,);
sendmessage(StrToInt(Edit1.Text), WM_USER+3, 0, Integer(str2));
我测试过这里sendmessage中的最后一个参数是PChar时才有效,是str3这个数组的指针时,收不到任何消息。我想传送数据的话,该怎么改这段代码?
回复

使用道具 举报

该用户从未签到

发表于 2014-7-6 20:17:00 | 显示全部楼层
試試看第三個參數改用 @str3[0] ?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-7-7 08:42:27 | 显示全部楼层
试下 IPCClient和IPCServer ?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2014-7-7 10:35:59 | 显示全部楼层
问题解决了。看了LAZARUS的wiki,用wndproc函数解决问题。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2014-7-7 10:36:34 | 显示全部楼层
1:确认句柄StrToInt(Edit1.Text)是不是另外一个进程或者线程的句柄。
2:str2 修改成全局变量。
通过指针传递数据时,传递的只是一个指针地址。地址中放的数据由于函数释放,局部变量str2先于接收程序的接收而释放,已经变成不可预知的数据,所以你的接收程序接收的数据永远不对。
3:传递参数和接收参数,str2可以定义为string
sendmessage(StrToInt(Edit1.Text), WM_USER+3, 0, integer(str2));
接受时
receicve(var msg : TMessage);...
var
  s : string;
  p : pointer;
begin
  p := integer(msg^.WPARAM);
  s := String(p^);
end;
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 21:00 , Processed in 0.027589 second(s), 10 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表