Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: C++-DLL --> Delphi - dynamischer struct-Array?

  Alt 20. Jun 2007, 14:22
aua, ein dynamisches Delphiarray ist was ganz anderes als was deine C-Funktion erwartet. Ein Dynamisches Array in Delphi ist wie ein dynamischer String in Delphi nur ein Pointer der auf die Daten und noch einige andere Infos zeigt.

Ich hoffe dir ist auch bewusst das deine DLL den Speicher freigeben muss wenn sie ihn angefordert hat. Laut deinem bisherigen Quelltext würdest du in der DLL speicher anfordern der nie frei gegeben wird.

Üblich ist folgendes:

Funktion in der DLL
Delphi-Quellcode:
function GibWerte(Speicher, AnzahlDerSpeicherElemente): Integer;
begin
  AnzahlderVorhandenenElemente;
  //in Speicher nur soviel schreiben wie rein passt und vorhanden ist
  //Wenn AnzahlderVorhandenenElemente also größer ist als AnzahlDerSpeicherElemente darfst du trotzdem nur AnzahlDerSpeicherElemente schreiben
  //ist AnzahlderVorhandenenElemente kleiner oder gleich AnzahlDerSpeicherElemente kannst du natürlich AnzahlderVorhandenenElemente schreiben.
  result := AnzahlDerVorhandenenElemente;
end;
Funktion außerhalb der DLL
Delphi-Quellcode:
var
  MeineElemente: Array of Element;
  Anzahl : Integer;
begin
  Anzahl := Dll_GibWerte(nil, 0);
  SetLength(MeineElemente, Anzahl);
  Dll_GibWerte(@MeineElemente[0], Anzahl);
  [...]
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat