Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
Delphi 10.4 Sydney
|
AW: Struct übergabe problem
16. Okt 2014, 14:22
Darum macht man sich immer als ersten Parameter im record ein StructSize : Integer/DWORD und vergleicht diesen Wert bei Empfang und reagiert entsprechend drauf.
Vgl. diverse Windows-APIs wo structs/records ausgetauscht werden.
Kleines Beispiel?
Keine Idee was du genau meinst.
Delphi-Quellcode:
program Project3;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Winapi.Windows;
type
TMyRecord = record
StructSize : DWORD;
MyHandle : THandle;
MyBoolValue : BOOL;
MyIntValue : Int32;
end;
procedure Foo( const ARecord : TMyRecord);
begin
if ARecord.StructSize <> SizeOf(TMyRecord) then
raise Exception.Create(' Die Welt geht unter, weil StructSize: ' + IntToStr(ARecord.StructSize));
Writeln(' Alles gut, StructSize ist so groß wie sie sein soll: ' + IntToStr(SizeOf(TMyRecord)));
end;
var
MyFunnyRecord : TMyRecord;
begin
try
FillChar(MyFunnyRecord, SizeOf(MyFunnyRecord), 0);
MyFunnyRecord.StructSize := SizeOf(MyFunnyRecord);
Foo(MyFunnyRecord);
MyFunnyRecord.StructSize := 666;
Foo(MyFunnyRecord);
except
on E: Exception do
begin
Writeln(E.ClassName, ' : ', E. Message);
Readln;
end;
end;
end.
Geändert von TiGü (16. Okt 2014 um 14:28 Uhr)
|
|
Zitat
|