Einzelnen Beitrag anzeigen

Stefan.Buchholtz

Registriert seit: 2. Dez 2004
Ort: Mönchengladbach
7 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Dispose = Exception, kein Dispose = Memory Leak

  Alt 20. Sep 2007, 12:16
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
Stefan Buchholtz
  Mit Zitat antworten Zitat