Wenn dynamisch belegter Speicher zwischen verschiedenen Modulen ausgetauscht wird, muss immer das Modul den Speicher freigeben, das ihn auch belegt hat. Alternativ kannst du sowohl im Programm als auch in der
DLL als erstes die
Unit ShareMem einbinden - das ersetzt den Standard-Speichermanager der Delphi-Runtime durch einen, der auch über Modulgrenzen funktioniert. Dann muss zusammen mit dem Programm allerdings noch die borlndmm.dll installiert werden, die diesen Speichermanager enthält.
Ohne ShareMem ist es so richtig:
Delphi-Quellcode:
procedure Register_API(
const Servername:
String );
begin
ApiRegisterInfoRec := new(PTApiRegisterInfoRec);
// Record füllen
ApiRegisterInfoRec.Servername := Servername;
// Callback Prozeduren übergeben
ApiRegisterInfoRec.OnState := @OnGetApiState;
ApiRegisterInfoRec.OnError := @OnGetApiError;
// DLL Register_ClientApplication aufrufen
Register_ClientApplication(ApiRegisterInfoRec);
// Speicher von ApiInitRec aufräumen
Dispose(ApiRegisterInfoRec);
end;
Stefan