簡體   English   中英

C#的Marshal.ReadInt32(IntPtr)在Delphi中意味着什么?

[英]What does C#'s Marshal.ReadInt32(IntPtr) mean in Delphi?

我正在將一些C#代碼翻譯成Delphi,我理解(msg = TMsg):

(int)msg.LParam

只是一個演員(如果我錯了請糾正我),但以下令人難以置信:

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

有人可以澄清一下嗎?

它只是從指針讀取一個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已經這樣做了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM