C#';ReadInt32(IntPtr)是德尔福语中的意思

本文关键字:德尔福语 意思 IntPtr ReadInt32 | 更新日期: 2023-09-27 18:28:46

我正在将一些C#代码翻译到Delphi,我理解(msg=TMsg):

(int)msg.LParam

只是一个演员阵容(如果我错了,请纠正我),然而以下让我难以置信:

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

有人能澄清一下吗?

C#';ReadInt32(IntPtr)是德尔福语中的意思

这只是从指针中读取一个4字节的整数。在托管.net代码中,您没有指针(除非您使用不安全的代码),因此该框架提供了帮助在本地和托管世界之间进行互操作的工具。MSDN上针对.net库的文档是全面的,当然,它描述了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已经定义了。