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;