Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Struct übergabe problem

  Alt 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)
  Mit Zitat antworten Zitat