![]() |
Interface Implementierung
Es gibt eine x_tlb.pas Datei mit Intefaces und eine andere Datei y_tlb.pas die eine Interface aus der x_tlb Datei implementiert.
Ich möchte nun eine andere Interface aus der x_tlb Datei verwenden ... weiss aber nicht wie. Könnte jemand helfen ? |
Re: Interface Implementierung
Was meinst du mit datein mit Interfaces? Du meinst wohl das in der datei ein Interface deklariert wurde.
Ein anderes Interface implemnetierst du genauso. |
Re: Interface Implementierung
Je nachdem um was für eine Art von Interface es sich
handelt kann es so oder so ähnlich aussehen:
Delphi-Quellcode:
Gruss,
uses
X_TLB, ComObj, ActiveX; ... TImplementingClass = class(TAutoObject, IMyInterface) ... // im Init-Abschnitt der Unit, die die implementierende Klasse enthält initialization TAutoObjectFactory.Create(ComServer, TImplementingClass, CLASS_MyInterface, ciMultiInstance, tmApartment); Markus |
Re: Interface Implementierung
Im Typelib-Editor von Delphi kannst du andere TLBs includieren.
Dazu links die Wurzel (Symbol 3 Rauten) anklicken und rechts auf Reiter "Verwendet" klicken. Dann im Kontextmenu "Alle Typbiblitheken anzeigen" wählen. |
Re: Interface Implementierung
Ja, aber die Implementation der ersten Interface ... war schon "vorhanden".
Die vorhandene Klasse die eine Interface implementiert sieht so aus:
Delphi-Quellcode:
TSB_API = class(TOleServer) // hier TOleServer!
private ... FIntf: ISB_API; function GetDefaultInterface: ISB_API; protected procedure InitServerData; override; procedure InvokeEvent(DispID: TDispID; var Params: TVariantArray); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Connect; override; procedure ConnectTo(svrIntf: ISB_API); procedure Disconnect; override; procedure Init(const p_bstrIN: WideString; out p_pbstrOUT: WideString; out p_plRetVal: Integer); ... end; ... procedure Register; resourcestring dtlServerPage = '(none)'; dtlOcxPage = '(none)'; implementation uses ComObj; class function CoSB_API.Create: ISB_API; begin Result := CreateComObject(CLASS_SB_API) as ISB_API; end; class function CoSB_API.CreateRemote(const MachineName: string): ISB_API; begin Result := CreateRemoteComObject(MachineName, CLASS_SB_API) as ISB_API; end; ... procedure TSB_API.Connect; var punk: IUnknown; begin if FIntf = nil then begin punk := GetServer; ConnectEvents(punk); Fintf:= punk as ISB_API; end; end; function TSB_API.GetDefaultInterface: ISB_API; begin if FIntf = nil then Connect; Assert(FIntf <> nil, 'DefaultInterface ist NULL. Die Komponente ist nicht mit dem Server verbunden. Sie müssen vor dieser Operation ''Connect'' oder ''ConnectTo'' aufrufen'); Result := FIntf; end; procedure TSB_API.Init(const p_bstrIN: WideString; out p_pbstrOUT: WideString; out p_plRetVal: Integer); begin DefaultInterface.Init(p_bstrIN, p_pbstrOUT, p_plRetVal); //hier klappt es! end; ... Meine Klasse für die neue Interface sieht so aus (habe ein COM Object erstellt):
Delphi-Quellcode:
... es klappt leider nicht!
type
TSB_SIS = class(TAutoObject, ISB_SIS) // hier TAutoObject! private isb: ISB_SIS; protected public constructor Create; destructor Destroy; override; procedure Advise4SIS(const p_bstrIN: WideString; out p_pbstrOUT: WideString; out p_plRetVal: Integer); safecall; ... end; ... implementation uses ComServ; constructor TSB_SIS.Create; begin isb := CoISB_SIS.Create; end; destructor TSB_SIS.Destroy; begin inherited; end; procedure TSB_SIS.Advise4SIS(const p_bstrIN: WideString; out p_pbstrOUT: WideString; out p_plRetVal: Integer); begin isb.Advise(p_bstrIN, p_pbstrOUT, RetVal); //hier klappt es nicht! end; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 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