Einzelnen Beitrag anzeigen

grinch_ac

Registriert seit: 25. Okt 2003
3 Beiträge
 
Delphi 6 Professional
 
#3

Re: Funktionsnamen aus INI-Datei (o.ä.) importieren

  Alt 26. Okt 2003, 16:44
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;
  Mit Zitat antworten Zitat