Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: OCX wird nicht freigegeben

  Alt 29. Okt 2007, 17:06
Zitat von Evil MM:
Normalerweise müsste ja jetzt auch die OCX wieder freigegeben sein, aber das ist sie nicht - sie ist immer noch gesperrt und offenbar scheint irgendeine Referenz auf die OCX zu zeigen.
Das wird wohl das Problem sein.
Die Anzahl der offenen Referenzen lässt sich über
ComServer.ObjectCount ermitteln.
Die globale Variable ComServer muss dazu natürlich von der OCX heraus benützt werden.
Du solltest auch mal einen Eventhandler für COMServer.OnLastRelease bereitstellen,
um genau festzustellen, wann die letzte Referenz "flöten gegangen" ist.

Delphi-Quellcode:
THelper = class(TObject)
  procedure OnLastReleaseHandler(Sender:TObject);
end;
procedure THelper.OnLastReleaseHandler(Sender:TObject);
begin
  ShowMessage('letzte Referenz ist nun weg');
  // ggf. OutputDebugString anstelle von ShowMessage verwenden
end;

var
  gHelper : THelper;

initialization
  gHelper := THelper.Create;
  COMServer.OnLastRelease := gHelper.OnLastReleaseHandler;
finalization
  COMServer.OnLastRelease := nil; // Zur Sicherheit
  gHelper.free;


Zitat von Evil MM:
Meine Frage: wie kann ich erzwingen, dass die OCX-Komponente nach der Zerstörung aller Objekte daraus wieder korrekt freigegeben wird?
Das würde ich nun überhaupt nicht empfehlen. Daraus folgen nur schwerwiegende Probleme beim Programmende.
Andreas
  Mit Zitat antworten Zitat