Zitat:
das widerspricht allem was mit Interfaces zu tun hat.
Aber das ist was man mir hier verklickert.
Ich suche das jetzt raus.
Zitat:
•Niemals eine Referenz auf das Objekt behalten und nutzen! Immer nur mit dem Interface arbeiten. Schon gar nicht das Objekt mit Free freigeben und damit allen Interfaces unter dem Allerwertesten wegziehen. Das gibt sehr schöne Fehler...
Free ist für mich das gleiche wie als wenn ich das Interface auf NIL setze. Darf man aber anscheinend nicht.
Dann tue ich folgendes..
Delphi-Quellcode:
// TODO
FillChar(SkinPopUpMenu, SizeOf(SkinPopUpMenu), 0);
if not Assigned(SkinPopUpMenu) then
PopUpCallback(OnPopupDestroyed);
Hier setze ich alle variablen auf 0, NIL oder wie auch immer danach ist mein Interface NIL (Da keine Variable mehr in gebrauch ist.)
Darf man aber anscheinend auch nicht.
Und ja ich weis das man eine Variable direkt auf Nil setzen kann wäre es nicht so dann sollte man es direkt lassen.
Aber da hat man mir dann wieder zwischen gepfuscht mit der Meldung nein man darf kein Interface selbst auf NIL setzen.
SkinPopUpMenu := Nil;
Ehrlich keine Ahnung was das noch soll.
Wie man es macht, macht man es falsch.
Hätte man mich nicht so irritiert mit den Referenz Zähler dann hätte ich schon lange einfach vor
PopUpCallback(OnPopupDestroyed);
Einfach
SkinPopUpMenu := Nil;
gesetzt und fertig.
Wäre ja nicht das erste mal das ich eine Variable auf NIL setze LOL.
Zitat:
Noch genauer wäre: "... wenn alle Referenzen auf das InterfaceObject Nil sind ..."
Sorry! Das ist genau mein Problem jeder sagt was anderes...
Mich interessiert das überhaupt nicht ob der Zähler 0 oder auf 3 steht.
Mich interessiert nur eins kann ich mein Interface selbst auf NIL setzen oder nicht.
Dann wäre meine Lösung diese
Delphi-Quellcode:
SkinPopUpMenu := nil;
PopUpCallback(OnPopupDestroyed);
und fertig .. alles so wie gehabt. (Bei normalen Classen)
gruss