Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Classe/Interface aus WinProc aufrufen (https://www.delphipraxis.net/193838-classe-interface-aus-winproc-aufrufen.html)

EWeiss 14. Sep 2017 12:42

AW: Classe/Interface aus WinProc aufrufen
 
Zitat:

Dann tippe ich wirklich auf gegenseitige Referenzierung.
Kann nicht sein denn wenn kein Submenu existiert dann wird diesbezüglich auch nichts Referenziert.
Keine einzige Variable die damit im Zusammenhang stehen könnte wird dann verwendet oder initialisiert.

gruss

stahli 14. Sep 2017 12:47

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.

EWeiss 14. Sep 2017 13:26

AW: Classe/Interface aus WinProc aufrufen
 
Zitat:

Zitat von stahli (Beitrag 1381150)
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.

Dank für deine Hilfe..
Werde ich wohl selbst fixen müssen wie auch immer. ;)

gruss

TiGü 14. Sep 2017 14:58

AW: Classe/Interface aus WinProc aufrufen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
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;
Dann in den eigenen _AddRef und _Release Haltepunkte setzen und vergleichen.
Irgendwo gibt es das Ungleichgewicht.

Fortgeschrittenen-Tipp:
Haltepunkte setzen aber in den Eigenschafen Break/Anhalten deaktivieren und den Call Stack mitloggen in der Ereignisanzeige:

EWeiss 14. Sep 2017 15:08

AW: Classe/Interface aus WinProc aufrufen
 
Danke werde das mal testen obwohl _AddRef , _Release eigentlich geerbt werden :)

gruss

Neutral General 14. Sep 2017 15:09

AW: Classe/Interface aus WinProc aufrufen
 
Zitat:

Zitat von EWeiss (Beitrag 1381180)
Danke werde das mal testen obwohl _AddRef , _Release eigentlich geerbt werden :)

Die Ableitung ist ja dafür da, dass du Breakpoints setzen kannst..

EWeiss 14. Sep 2017 15:19

AW: Classe/Interface aus WinProc aufrufen
 
Zitat:

Zitat von Neutral General (Beitrag 1381181)
Zitat:

Zitat von EWeiss (Beitrag 1381180)
Danke werde das mal testen obwohl _AddRef , _Release eigentlich geerbt werden :)

Die Ableitung ist ja dafür da, dass du Breakpoints setzen kannst..

Ja habe ich schon verstanden .. Danke.

gruss

stahli 14. Sep 2017 15:31

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?

Zacherl 14. Sep 2017 15:59

AW: Classe/Interface aus WinProc aufrufen
 
Zitat:

Zitat von stahli (Beitrag 1381185)
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?

Sämtliche Methoden, die du in einem Interface deklarierst, sind automatisch
Delphi-Quellcode:
virtual
(und
Delphi-Quellcode:
abstract
).
Delphi-Quellcode:
_AddRef
,
Delphi-Quellcode:
_Release
und
Delphi-Quellcode:
QueryInterface
werden von Delphi automatisch zu jedem Interface hinzugefügt, um die COM Kompatibilität zu gewährleisten.

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 MSDN-Library durchsuchenIUnknown einfach als normale Klasse mit den entsprechenden 3 virtuellen Methoden deklariert (eine Unterscheidung zwischen
Delphi-Quellcode:
class
und
Delphi-Quellcode:
interface
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
Delphi-Quellcode:
_AddRef
aufrufen, sobald man eine neue Referenz erzeugt bzw. Wrapperklassen verwenden, die das für einen übernehmen).

stahli 14. Sep 2017 16:02

AW: Classe/Interface aus WinProc aufrufen
 
Oha, vielen Dank! Wichtiger Hinweis!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz