![]() |
AW: QueryInterface und RefCount
Okay. Probiere ich aus...
|
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 |
AW: QueryInterface und RefCount
Vieleicht hilft dir das weiter:
![]() |
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:
Gruß,
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; Toni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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-2025 by Thomas Breitkreuz