![]() |
OffsetOf Delphi ekvivalent?
Is there such function in delphi ?
Thanks |
Re: OffsetOf Delphi ekvivalent?
Can you describe in some words
what the original function is doing? Best regards Klaus |
Re: OffsetOf Delphi ekvivalent?
Zitat:
|
Re: OffsetOf Delphi ekvivalent?
Delphi-Quellcode:
found in
var x: record
a: word; b: longword; end; offset := Integer(@x.b) - Integer(@x); // or offset := Integer(@x.b) - Integer(@x.a); ![]() |
Re: OffsetOf Delphi ekvivalent?
in my case its a bit diffrent..
Delphi-Quellcode:
var
length:DWORD; length:=OffsetOf(record, member.CharData) + sizeof(member.CharData); |
Re: OffsetOf Delphi ekvivalent?
Code:
This would presumably it look something like this in Delphi.
#define offsetof(struct_type, member) \
(size_t) &(((struct_type *)0)->member)
Delphi-Quellcode:
My code would look something like this.
function OffsetOf(StructType: Type; Member: string): Integer;
type P = ^StructType; begin //Result := Integer(@P(nil)^.[Member]) - Integer(@P(nil)^); //Result := Integer(@P(nil)^.[Member]) - Integer(P(nil)); //Result := Integer(@P(nil)^.[Member]) - 0; Result := Integer(@P(nil)^.[Member]); end;
Delphi-Quellcode:
But Delphi does not support macros.
function OffsetOf(StructType: Type; Member: string): Integer;
var X: StructType; begin Result := Integer(@X.[Member]) - Integer(@X); end; Zitat:
Delphi-Quellcode:
length := Integer(@PMember(nil).CharData) + SizeOf(TMember.CharData);
|
Re: OffsetOf Delphi ekvivalent?
Himitsu, dein Code ist leider ein bissel dolle falsch. Denn Pointer sind nicht Integer, sondern Cardinal.
Anwendungen, die diese Annahme machen (Pointer=Integer), sind die ersten, die auf einem Windows explodieren, das "alten" 32Bit Apps mehr als 2GB Addressraum gibt. @Nanix, I am pretty sure you can _read_ German just fine. In any other case, posting in German forum might be a bit moot to begin with, hmm? |
Re: OffsetOf Delphi ekvivalent?
@Elvis: Integer oder Cardinal ist hier egal, da nach der Subtraktion eh keine Werte über 2 GB groß sein werden.
(Addition und Subtraktion wird bei Integer und Cardinal gleich behandelt) Zumindestens habe ich noch keinen Record gesehn, welcher über 2 GB groß ist. :roll: |
Re: OffsetOf Delphi ekvivalent?
I can only understand read but not write german. :)
|
Re: OffsetOf Delphi ekvivalent?
Zitat:
Aber um beim Karo zu bleiben könnte ein record 2GB überschreiten. Natürlich würde die App, dann nur auf einem Win2003 oder Win64 laufen. Aber 32Bit Apps können halt mehr als 2GB adressieren und deshalb sollte man sich angewöhnen (vorzeichenbehaftete) Integer und Pointer nicht gleich zu benutzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz