![]() |
AW: Classe/Interface aus WinProc aufrufen
Zitat:
Keine einzige Variable die damit im Zusammenhang stehen könnte wird dann verwendet oder initialisiert. gruss |
AW: Classe/Interface aus WinProc aufrufen
Habe das gerade korrigiert.
Ich schreibe hier schnell mal parallel während der Arbeit. Da bin ich manchmal nicht konzentriert genug. :-( Dann musst Du mal schauen, wo da noch eine Referenz gehalten wird. |
AW: Classe/Interface aus WinProc aufrufen
Zitat:
Werde ich wohl selbst fixen müssen wie auch immer. ;) gruss |
AW: Classe/Interface aus WinProc aufrufen
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Dann in den eigenen _AddRef und _Release Haltepunkte setzen und vergleichen.
TSkinPopUpMenu = class(TInterfacedObject, ISkinPopUpMenu...)
... protected function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public ... end; ... function TSkinPopUpMenu._AddRef: Integer; begin Result := inherited _AddRef; end; function TSkinPopUpMenu._Release: Integer; begin Result := inherited _Release; end; Irgendwo gibt es das Ungleichgewicht. Fortgeschrittenen-Tipp: Haltepunkte setzen aber in den Eigenschafen Break/Anhalten deaktivieren und den Call Stack mitloggen in der Ereignisanzeige: |
AW: Classe/Interface aus WinProc aufrufen
Danke werde das mal testen obwohl _AddRef , _Release eigentlich geerbt werden :)
gruss |
AW: Classe/Interface aus WinProc aufrufen
Zitat:
|
AW: Classe/Interface aus WinProc aufrufen
Zitat:
gruss |
AW: Classe/Interface aus WinProc aufrufen
Ich hätte das auch schon vorgeschlagen, dachte aber, das ginge nicht, weil _AddRef ja nicht virtuell ist und somit nicht überschrieben werden kann...
Gibt es (zum Verständnis) eine Erklärung, warum das so funktioniert? |
AW: Classe/Interface aus WinProc aufrufen
Zitat:
Delphi-Quellcode:
(und
virtual
Delphi-Quellcode:
).
abstract
Delphi-Quellcode:
,
_AddRef
Delphi-Quellcode:
und
_Release
Delphi-Quellcode:
werden von Delphi automatisch zu jedem Interface hinzugefügt, um die COM Kompatibilität zu gewährleisten.
QueryInterface
Im Grunde sind COM Interfaces auch lediglich Klassen, welche mindestens die oben genannten virtuellen Methoden besitzen. Unter C++ sieht man das ganz schön, denn da ist das Basisinterface ![]()
Delphi-Quellcode:
und
class
Delphi-Quellcode:
gibt es hier gar nicht). Die Unterscheidung - wie man sie in Delphi hat - ist vermutlich nur vorhanden, weil Delphi die Interfaces ja tatsächlich auch unterschiedlich behandelt (automatischer RefCount und Freigabe, etc). In anderen Sprachen hat man dieses Verhalten nicht (man muss manuell
interface
Delphi-Quellcode:
aufrufen, sobald man eine neue Referenz erzeugt bzw. Wrapperklassen verwenden, die das für einen übernehmen).
_AddRef
|
AW: Classe/Interface aus WinProc aufrufen
Oha, vielen Dank! Wichtiger Hinweis!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz