Prima Idee, ich habe das jetzt mal versucht, es sieht auch soweit ganz gut aus, allerdings bekomme ich beim Aufruf der Funktion eine Zugriffsverletzung ("Zugriffsverletzung bei Adresse xxxxxx in Modul 'Test.exe', Lesen von Adresse yyyyyy"), der Debugger steht dabei in der ersten Zeile der aufzurufenden Funktion 'MachNix', d.h. gefunden hat er sie wohl schon
. Was mache ich jetzt dabei falsch? Muss ich noch irgenwelche anderen Parameter oder Pointer initialsieren? Bis jetzt sieht das Ganze so aus:
Delphi-Quellcode:
type
TConvertFunction =
function(Param:
string):
string of object;
TStringConverter =
class(TObject)
published
function Convert(func, Param:
string):
string;
// <=== Diese Funktion wird von aussen mit dem
// Namen der Funktion (func) und dem an
// die Funktion zu übergebenden String-
// Parameter (Param) aufgerufen
function MachNix(Param:
string):
string;
end;
implementation
{ TStringConverter }
function TStringConverter.convert(func, Param:
string):
string;
var
PConvertFunc: Pointer;
FConvertFunc: TConvertFunction;
begin
@FConvertFunc:=
nil;
PConvertFunc:= self.MethodAddress(func);
@FConvertFunc:= PConvertFunc;
if assigned(FConvertFunc)
// <=== das klappt noch
then
result:= FConvertFunc(Param)
// <=== und dabei knallt's
else
result:= '
invalid function call: '+func;
end;
function TStringConverter.MachNix(Param:
string):
string;
begin
result:= Param;
// <=== hier steht dann der Debugger mit der Exception
end;
Der Aufruf von aussen sieht in etwa so aus und klappt auch:
Delphi-Quellcode:
TTestThread.execute
var
FStrConv: TStringConverter;
S,T: string;
begin
S:= 'Hallo';
T:= 'Huhu';
FStrConv:= TStringConverter.Create();
T:= FStrConv.Convert('MachNix',S);
end;