Ich möchte einer DLL die Adresse einer Methode übergeben, damit die DLL diese Aufrufen kann.
Beispiel mit einer Prozedur:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| Procedure Trc(Level:integer;Text:Pchar); var i:integer; s:string; begin for i:= 1 to length(funcstac) do s:= s+ '| '; s:=s+string(Text); if level >= TRCLevel Then MainWindow.xTrc(s); end;
const NTRC = 1;
type TTRC = Procedure (Level:Integer;Text:pchar);
var TRC :TTRC;
procedure SetFunction (FuncNumber:Integer; Address:Pointer); begin case FuncNumber of NTRC: @TRC := Address; end; end;
SetFunction (1,@TRC); |
Nach dem Aufruf der von SetFunction aus dem Programm herraus wurde der DLL die Prozedur TRC bekanntgegeben.
Nun kann die DLL die Prozedur TRC aufrufen.
Soweit so gut ...
Nun möchte ich aber nicht eine Prozedur übergeben, sondern eine Methode:
Also statt
SetFunction(1,@TRC)
so etwas wie
SetFunction(1,@Object.TRC)
DAS GEHT ABER NICHT!!!
Fehler: [Error] UPlugin.pas(173): Variable required
Hat jemand eine Idee ???
Ich habe auch schon Object.@TRC
und Object.MethodAddress('TRC') versucht.
Moderiert von Tino: Code- durch Delphi-Tags ersetzt