In Anwendungen ist die Kombination von tobject.destroy() und COM-Interface trotzdem problematisch. Es ist besser statdessen CORBA-Interface zu verwenden.Michl hat geschrieben:@mse: Eigentlich funktionieren jetzt COM Interface Properties im Designer von Lazarus.
Wie sieht GetObjectHasInterface() aus?Kannst du mir erklären, warum ich unter 32bit ein Offset von 48 und bei 64bit ein Offset von 88 habe, wenn ich testen will, ob der Zeiger auf AComponent gleich Zeiger auf ObjectHasInterface ist?! (ObjectHasInterface ist eine Instanz von TCompInterface = class(TComponent, ITestInterface) )
Code: Alles auswählen
result:= FObjectHasInterface;
Dann ist ObjectHasInterface kein pointer auf eine TCompInterface Instanz sondern ein pointer auf einen Eintrag in der Interface-Tabelle des Objektes, welches ITestInterface implementiert. Wo dieser Eintrag innerhalb der Objektinstanz liegt ist ein "undocumented implementation detail" und von der Pointergrösse abhängig.
Um zu testen ob ObjectHasInterface von AComponent implementiert wird:
Code: Alles auswählen
if AComponent.IsImplementorOf(ObjectHasInterface) then begin
end;