gpt4 book ai didi

delphi:通过 64 位的 postmessage 发送一个类

转载 作者:行者123 更新时间:2023-12-02 02:41:46 24 4
gpt4 key购买 nike

我想让我的应用程序兼容 64 位。我正在努力处理 PostMessage 和 LPARAM。我通过 PostMessage 发送一个类的实例。我想知道将值 test_data 转换为 LPARAM 是否正确。

请看下面的代码:

// Data to send 
TMyData=class
Data1: string;
Data2: byte;
Data3: TDateTime;
end;

// send
procedure TTestClass1.PostTestData(AData1: string; AData2: byte; AData3: TDateTime);
var
test_data: TMyData;
begin
test_data:= TMyData.Create;

test_data.Data1:= AData1;
test_data.Data2:= AData2;
test_data.Data3:= AData3;

PostMessage(my_handle,WM_MY_MESSAGE,0,LPARAM(test_data));
end;


// receive
procedure TTestClass2.Message_WM_MY_MESSAGE(var Msg: TMessage);
var
test_data: TMyData;
begin
test_data := TMyData(Msg.LParam); // is this also compatible with 64 Bit?

try
// Do some work
finally
test_data.Free;
end;
end;

以上代码是否兼容64位?

最佳答案

您所展示的内容将正常工作,因为 LPARAM 被定义为 LONG_PTR,它在 32 位上都是一个指针大小的整数和 64 位系统(与 WPARAM 相同,定义为 UINT_PTR)。许多标准 Win32 消息在其 WPARAMLPARAM 值中携带指针。用户定义的消息也可以执行相同的操作(只要它们不跨越进程边界)。

如果 PostMessage() 失败,请务必释放您的对象,因为在这种情况下不会调用 Message_WM_MY_MESSAGE():

procedure TTestClass1.PostTestData(AData1: string; AData2: byte; AData3: TDateTime);
var
test_data: TMyData;
begin
test_data := TMyData.Create;

test_data.Data1 := AData1;
test_data.Data2 := AData2;
test_data.Data3 := AData3;

if not PostMessage(my_handle, WM_MY_MESSAGE, 0, LPARAM(test_data)) then
test_data.Free; // <-- add this
end;

关于delphi:通过 64 位的 postmessage 发送一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63474436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com