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.