Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: DLL Programmierung - Wie übergebe ich am sinnvollsten meine Daten?

  Alt 30. Sep 2016, 16:10
Also wenn du komplett sichergehen willst, nimmst du für String-Felder ShortString bzw. array[0..n-1] of Char . Hierbei ist es wichtig, dass die Größe statisch ist. Zum Zurückgeben eines Arrays mit dynamischer Anzahl von Elementen, kannst du dich an der Windows API orientieren. Die handhabt sowas in folgender Form:

Delphi-Quellcode:
type
  PRecord = ^TRecord;
  TRecord = record
    Field1: Integer;
    Field2: array[0..255] of Char;
  end;

function ReturnArrayOfRecords(Records: PRecord; Size: DWord; var NumberOfRecords: Integer): Boolean;
Auf der anderen Seite sieht das dann folgendermaßen aus:
Delphi-Quellcode:
var
  Records: PRecord;
  Size: DWord;
  I, NumberOfRecords: Integer;
begin
  // NumberOfRecords ermitteln
  ReturnArrayOfRecords(nil, 0, NumberOfRecords);
  Size := NumberOfRecords * SizeOf(TRecord);
  GetMem(Records, Size);
  try
    // Daten ermitteln
    if (ReturnArrayOfRecords(Records, Size, NumberOfRecords)) then
    begin
      for I := 0 to NumberOfRecords - 1 do
      begin
        // Arbeite mit Record #I
        Inc(Records);
      end;
    end;
  finally
    FreeMem(Records);
  end;
end;
Alternativ kannst du statt der Pointer hier auch ein dynamisches Array und SetLength verwenden.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat