Einzelnen Beitrag anzeigen

ulrich.b

Registriert seit: 21. Sep 2005
Ort: Kattau (AT)
79 Beiträge
 
Delphi 2009 Professional
 
#1

COM: Wie bekomme ich das Objekt hinter einem Interface

  Alt 21. Feb 2008, 00:18
COM Server

Zum einen habe ich eine Daten Klasse

Delphi-Quellcode:
  TDaten = class(TAutoObject, IDaten)
  private
    FGekapselt: TGekapselt;

  protected
    function Get_A: Integer; safecall;
    procedure Set_A(Value: Integer); safecall;

    function Get_obj_ptr: Pointer; safecall;

  public
    property Gekapselt: TGekapselt read FGekapselt;

  end;
Und zum anderen eine Klasse mit einer Methode, die einen Pointer auf dieses Interface als Parameter hat

Delphi-Quellcode:
  TAndereKlasse = class(TAutoObject, IAndereKlasse)
  protected
    function DoSomething(const Daten: IDaten): Integer; safecall;
  end;

Nun möchte ich innerhalb von DoSomething nicht nur auf die Interface Member, sondern auf das Objekt dahinter (die TDaten Instanz) zugreifen (Bevor ihr wieder alle fragt warum: Um an gekapselte Daten ranzukommen, wie ichs mit dem public Property angedeutet hab).

Gibts da igendeine schöne möglichkeit, um an den Pointer ranzukommen??

Ich hab es nämlich so gelöst:

Delphi-Quellcode:
function TDaten.Get_obj_ptr: Pointer;
begin
  Result := Self;
end;
Zugriff auf die Instanz:

Delphi-Quellcode:
function TAndereKlasse.DoSomething(const Daten: IDaten): Integer;
var
  DatenInstanz: TDaten;
begin
  DatenInstanz := TDaten(Daten.obj_ptr);
end;
Ich exportiere über das Interface einfach eine Methode, die den Objektpointer nach außen liefert. Gibt es hierfür schönere Lösungen? Können durch meine Implementierungen Probleme entstehen?
  Mit Zitat antworten Zitat