Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi QueryInterface und RefCount (https://www.delphipraxis.net/189313-queryinterface-und-refcount.html)

Tonic1024 1. Jun 2016 07:18

AW: QueryInterface und RefCount
 
Okay. Probiere ich aus...

Tonic1024 1. Jun 2016 13:30

AW: QueryInterface und RefCount
 
Okay, das Verhalten hat sich durch das Weglassen von AInstance verändert... Allerdings nicht zum Besseren. :?

Ich hatte die Implementation schon so weit, dass der DatabaseManager akzeptiert wurde und mir eine Art Callback gab in dem ich dann auf den ContextHolder zugreife (Zeile 168, Interface.hpp). Hier gab es die Methoden Signatur Exception. Wenn ich den AInstance Parameter weg lasse wird die Exception schon früher, beim Erzeugen des DatabaseManagers, geworfen. [Edit]Das Gleiche übrigens wenn ich virtual; weg lasse.[/Edit]

Wenn ich das Interface implementiere wie von dir vorgeschlagen, allerdings mit dem "komischen Parameter", was mir auch durchaus logisch erscheint, bin ich wieder dort wo ich angefangen bin. Wieder Exception beim Zugriff auf den ContextHolder Zeile 168.

Heisst das nun, dass die Implementation des DatabaseManagers bereits akzeptiert wurde und das Problem nur noch am ContextHolder liegt? Oder kann man das pauschal so nicht herleiten bevor man nicht Input und Output getestet hat?

IUnknown und IInterface macht bis hier keinen Unterschied.


Toni

Blup 3. Jun 2016 11:12

AW: QueryInterface und RefCount
 
Vieleicht hilft dir das weiter: http://rvelthuis.de/articles/articles-cppobjs.html

Tonic1024 9. Jun 2016 07:44

AW: QueryInterface und RefCount
 
Mein Chef hat beschlossen, dass das alles zu lange dauert und ich muss nun zunächst ein anderes Projekt vorziehen.

Trotzdem möchte ich zukünfitgen "Probleminhabern" (:wink:) noch die vermeintliche (werde ich genau wissen wenn das Projekt abgeschlossen sein wird) Auflösung verraten. Sie basiert auf dem Vorschlag von Himitsu (Vielen Dank dafür) und wirft zumindest den Methoden-Signatur Fehler nicht mehr.

Delphi-Quellcode:
type
  PClientContextHolder = ^TClientContextHolder;
  ICientContextHolder = interface(IUnknown)
  ['{00000000-0000-0000-0000-000000001112}']
    function GetSerialNumber(): LPWSTR; stdcall;
    function GetLicencePlate(): LPWSTR; stdcall;
    [..]
    function GetVin(): LPWSTR; stdcall;
    procedure SetVin(AVin: LPWSTR); stdcall;
  end;
  TClientContextHolder = class(TInterfacedObject, ICientContextHolder)
  private
    FVin: LPWSTR;
    FVinKnown: BOOL;
  public
    constructor Create();
    function GetSerialNumber(): LPWSTR; virtual; stdcall;
    function GetLicencePlate(): LPWSTR; virtual; stdcall;
    [..]
    function GetVin(): LPWSTR; virtual; stdcall;
    procedure SetVin(AVin: LPWSTR); virtual; stdcall;
  end;
Gruß,

Toni


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz