Einzelnen Beitrag anzeigen

shmia

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

Unitname anhand Objektreferenz ermitteln

  Alt 26. Apr 2010, 17:16
Hi, ich möchte den Namen der implementierenden Unit eines Objekts ermitteln.
Dazu habe ich folgenden Code:
Delphi-Quellcode:
uses TypInfo;

function _GetUnitName(argObject: TObject): string;
var
  ptrTypeData: PTypeData;
begin
  if (argObject.ClassInfo <> nil) then
  begin
    ptrTypeData := GetTypeData(argObject.ClassInfo);
    Result := ptrTypeData.UnitName;
  end;
end;
Wenn ich ein Objekt übergebe, dann funktioniert das auch recht schön:
ShowMessage(_GetUnitName(Button1)); // Liefert StdCtrls ABER, wenn ich das Objekt über einen Umweg ermittle, dann klappt das leider nicht mehr:
Delphi-Quellcode:
type
   ITest = interface(IUnknown)
   ['{3270CA90-8F84-411E-A262-B7AFF9B87A43}']
   function GetSelfPointer:TObject;
   end;

   TTest = class(TInterfacedObject, ITest)
   protected
     function GetSelfPointer:TObject;
   end;

procedure TForm1.Button2Click(Sender: TObject);
var
   test : ITest;
   obj : TObject;
begin
   test := TTest.Create;
   obj := test.GetSelfPointer;
   ShowMessage(_GetUnitName(obj)); // liefert nichts
   // obj.ClassInfo ist nil, warum?
end;
Hintergrund der Geschichte ist, dass ich DUnit so erweitern möchte, dass zusätzlich noch der Unitname angezeigt wird.
Das wäre für alle DUnit-Benutzer ein kleines Sahnehäubchen obendrauf.
Andreas
  Mit Zitat antworten Zitat