一个关于wm_copydata的问题
传送端:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure SendText(hwndSend:THandle;str:string);
public
{ Public declarations }
end;
const
Mesg=1600;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
fhandle:THandle;
begin
fhandle:=FindWindow(nil,'测试接收WM_COPYDATA');
if fhandle>0 then
SendText(fhandle,Edit1.text);
end;
procedure TForm1.SendText(hwndSend:THandle;str: string);
var
buf:pchar;
bufflength:integer;
databuffer:TCopyDataStruct;
begin
bufflength:=length(str)+1;
buf:=allocmem(bufflength);
Strcopy(buf,PChar(str));
try
databuffer.dwData:=Mesg;
databuffer.cbData:=bufflength;
databuffer.lpData:=buf;
SendMessage(hwndSend,WM_COPYDATA,handle,LongInt(@databuffer));
finally
freemem(buf,bufflength);
end;
end;
end.
接收端:
unit receive;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
CONST
cMsg=1600;
type
TForm1 = class(TForm)
Memo1: TMemo;
private
{ Private declarations }
procedure WMCOPYData(var Mesg:TMessage);message WM_COPYDATA;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMCOPYData(var Mesg: TMessage);
var
s:string;
begin
if PCopyDataStruct(Mesg.lParam)^.dwData=cMsg then
begin
s:=Pchar(PCopyDataStruct(mesg.lparam)^.lpData);
Memo1.Lines.add(s);
end;
end;
end.
出现二个奇怪问题:
1、在delphi2010中,接收端显示的数据是乱码。
2、在delphi7中上面的代码执行正常,接收端可以正常接收发送端发过来的字符串。
但是如果将接收端的WMCOPYDATA方法中的
s:=Pchar(PCopyDataStruct(mesg.lparam)^.lpData);
Memo1.Lines.add(s);
改成memo1.lines.add(Pchar(PCopyDataStruct(mesg.lparam)^.lpData)),则在接收端中也显示为乱码。
造成上述问题的原因是什么??还请各位高手指点,谢谢!
相关推荐
完全复现虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)
内容概要:本文详细介绍了名为《【完全复现】虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)》的技术资源,重点围绕虚拟同步发电机(VSG)的自适应惯量与阻尼控制展开,涵盖系统建模、控制策略设计、根轨迹分析及调节系数对比等内容,通过Simulink仿真与Matlab代码实现,帮助读者深入理解VSG在电力系统中的动态响应特性与控制优化方法;文档还列举了大量相关科研资源,涉及电力系统、智能优化、信号处理、路径规划等多个领域,展示了丰富的仿真案例与算法应用。; 适合人群:具备电力系统、自动控制或相关专业背景,熟悉Matlab/Simulink仿真环境,有一定科研基础的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于学习和复现虚拟同步发电机的自适应控制策略,掌握其在微电网和新能源并网中的应用;②通过根轨迹与参数调节分析,优化控制系统动态性能;③结合提供的代码与模型,开展电力系统稳定性研究、课程设计或科研项目开发。; 阅读建议:建议读者结合文中提到的完整资源目录和网盘资料,下载配套的Matlab代码与Simulink模型进行实践操作,边仿真边理解理论原理,重点关注控制参数对系统稳定性的影响,并可拓展应用于其他电力电子变流器或构网型控制研究。
政府如何精准评估园区创新能力并制定有效产业政策?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
央企如何借助数据分析提升创新管理体系效能?.docx
央企如何借助数据分析提升创新管理体系效能?
MATLAB模拟6自由度无人机检查,具备干扰补偿、裂纹检测和自主复检功能。.zip
1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
政府园区如何通过数据分析提升区域科技决策效率?.docx
政府园区如何通过数据分析提升区域科技决策效率?


Windows SDK/API
