gpt4 book ai didi

c# - C# 的 Marshal.ReadInt32(IntPtr) 在 Delphi 中是什么意思?

转载 作者:行者123 更新时间:2023-11-30 14:00:50 24 4
gpt4 key购买 nike

我正在将一些 C# 代码翻译成 Delphi,我明白 (msg = TMsg):

(int)msg.LParam

只是一个 Actor (如果我错了请纠正我),但是以下内容让我感到困惑:

Marshal.ReadInt32( (IntPtr)msg.WParam, 4 )

有人可以澄清一下吗?

最佳答案

这只是从指针中读取一个 4 字节整数。在托管 .net 代码中,您没有指针(除非您使用不安全的代码),因此该框架提供了工具来帮助在 native 世界和托管世界之间进行互操作。 .net 库的 MSDN 文档非常全面,当然也描述了 Marshal.ReadInt32 .

这里额外的复杂是有一个额外的 4 个字节的偏移量。实际上,指针可能指向一个结构,这段代码在结构的偏移量 4 处挑选整数值。这绝对是对代码现状最有可能的解释。

现在,直译为:

PInteger(msg.WParam+4)^

但您也可以像这样用 Delphi 编写它:

type
TMyRecord = record
i1: Integer;
i2: Integer;
end;
PMyrecord = ^TMyRecord;
....
value := PMyRecord(msg.WParam)^.i2;

如果您知道此 WParam 与哪条消息相关,那么您也将知道此处要使用的真正 record 是什么。因此您不需要定义专用记录,因为 Windows.pas 已经这样做了。

关于c# - C# 的 Marshal.ReadInt32(IntPtr) 在 Delphi 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809978/

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