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?