Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#1

Ist im Prozedurzeiger eine Klasse drin?

  Alt 4. Feb 2011, 11:10
Delphi-Version: XE
Ja ja, ich mit meinen komischen Fragen ... ach ja, Moin erstma.


Kann man irgendwie rausbekommen, ob in einer type T = procedure(...) of object; ein Zeiger auf eine Methode+Objektinstanz oder eine Klassenmethode+Klassenzeiger drinsteckt?

Delphi-Quellcode:
type
  TProc = procedure of object;
  TTest = class
    procedure A;
    class procedure B;
  end;

var
  X: TProc;
  O: TTest;

X := O.A;
X := TTest.B;
Beides ist ja möglich.

Zwecks Threadsicherheit würde ich gern einen Clone des Objekts erstellen, wenn ein Objekt drin ist, ansonsten direkt aufrufen.

Also irgendwas in dieser Richtung vielleicht?
Delphi-Quellcode:
if TMethod(X).Data is TClass then ...
if TMethod(X).Data is TObject then ...


[add]
Hier laufe ich (zufällig) jeweils, beim Test auf's Andere, in eine Exception
und auf Exceptions möchte ich gerne verzichten.
Delphi-Quellcode:
type
  TProc = procedure of object;
  TTest = class
    procedure A;
    class procedure B;
  end;

procedure TTest.A;
begin
end;

class procedure TTest.B;
begin
end;

procedure Check(Proc: TProc);
begin
  try
    if TObject(TMethod(Proc).Data) is TTest then
      Beep;
  except
  end;
  try
    if TClass(TMethod(Proc).Data).InheritsFrom(TTest) then
      Beep;
  except
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
var
  X: TProc;
  O: TTest;
begin
  O := TTest.Create;
  X := O.A;
  Check(X);
  O.Free;

  X := TTest.B;
  Check(X);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Feb 2011 um 11:26 Uhr)
  Mit Zitat antworten Zitat