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;