AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interface Implementierung

Ein Thema von conti · begonnen am 23. Nov 2006 · letzter Beitrag vom 23. Nov 2006
Antwort Antwort
conti

Registriert seit: 10. Nov 2006
19 Beiträge
 
#1

Interface Implementierung

  Alt 23. Nov 2006, 13:03
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 ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Interface Implementierung

  Alt 23. Nov 2006, 13:18
Was meinst du mit datein mit Interfaces? Du meinst wohl das in der datei ein Interface deklariert wurde.
Ein anderes Interface implemnetierst du genauso.
Markus Kinzler
  Mit Zitat antworten Zitat
markusl

Registriert seit: 25. Apr 2006
Ort: Rotkreuz
21 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Interface Implementierung

  Alt 23. Nov 2006, 13:25
Je nachdem um was für eine Art von Interface es sich
handelt kann es so oder so ähnlich aussehen:

Delphi-Quellcode:
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);
Gruss,
Markus
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Interface Implementierung

  Alt 23. Nov 2006, 14:04
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.
Andreas
  Mit Zitat antworten Zitat
conti

Registriert seit: 10. Nov 2006
19 Beiträge
 
#5

Re: Interface Implementierung

  Alt 23. Nov 2006, 14:08
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:
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;
 ...
... es klappt leider nicht!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
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