Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
24. Mär 2006
Hallo,
:thumb:
Gruß
xaromz
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
24. Mär 2006
Hallo,
Die Regeln von Interfaces können niemals für Objekte gelten, da Objekte keine Interfaces sind. Aber ich weiß, was Du meinst :wink: .
Schade, dass Du nicht verstanden hast, um was es eigentlich geht.
:?:
Das weiß ich durchaus. Das System ist ja auch gut so. Wie gesagt, ich weise nur auf die möglichen Seiteneffekte hin.
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
24. Mär 2006
Hallo,
Tatsache. Hatte ich überlesen.
Gruß
xaromz
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
24. Mär 2006
Hallo,
Ich hab' da keinen Denkfehler, keine Angst. Erklärung folgt.
Du benutzt aber ein anderes Beispiel als wir hier diskutieren. Bei uns sieht das so aus:
procedure Test1;
begin
FMyObject := TMyObject.Create;
TuWas(FMyObject);
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
23. Mär 2006
Hallo,
Das ist noch nicht alles. Schau Dir mal mein Demoprogramm an. Da wird das Objekt schon durch den Aufruf einer Prozedur (mit dem Objekt als Parameter) freigegeben, weil eben die Referenzzählung durcheinendergerät.
Gruß
xaromz
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
23. Mär 2006
Hallo Hagen,
mit Deinen Ausführungen hast Du natürlich recht.
Weiter oben hat MasterEvil aber geschrieben, dass er im Hauptprogramm auf Methoden/Eigenschaften des Objektes zugreift, die nicht per Interface erreichbar sind. Das ist ja wegen der Sichtbarkeit vom "objektorientierten Standpunkt" aus auch gut so. Leider ist so ein Mix aber nicht wirklich gefahrlos möglich, da er zu den beschriebenen...
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
23. Mär 2006
Hallo,
das Zerstören des Objekts überlässt Du dem GC. Daher ruf ich auch _Release auf. Durch das manuelle hochzählen des Referenzzählers steht der am Ende auf Eins. Um das Objekt zu zerstören, rufst Du _Release auf, womit der Zähler auf Null geht und das Objekt sich selbst zerstört. Deshalb ist auch kein Free nötig.
Ich häng mal ein Beispiel ran:
Die beiden oberen Buttons erstellen ein...
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
23. Mär 2006
Hallo,
versuch mal folgendes:
var
MyClass: TMyClass;
begin
MyClass := TMyClass.Create;
MyClass._AddRef; // <- internen Zähler hochsetzen
MachWas(MyClass);
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
21. Mär 2006
Hallo,
Deine Klasse musst Du natürlich als TInterfacedObject deklarieren. Was Du aber nicht machen darfst, ist folgendes:
type
TMyClass = class(TInterfacedObject, IMyInterface)
end;
procedure MachWas(MyInterface: IMyInterface);
begin
//
Forum: Sonstige Fragen zu Delphi
Delphi
by xaromz,
21. Mär 2006
Hallo,
ist FPmInterface ein TInterfacedObject oder ein Interface? Falls es ersteres ist, dann solltest Du das vergessen und nur das Interface speichern. Wenn Du nämlich ein TInterfacedObject erstellst und speicherts ist der Referenzzähler Null. Sobald Du dann das Interface benutzt wird der Referenzzähler erhöht und wieder vermindert -> Objekt wird freigegeben. Lästige Sache.
Siehe auch hier....