auteurs : Nono40, delphiprog
Les procédures n'étant pas des méthodes d'objet il n'est pas possible d'utiliser RTTI pour en trouver les adresses. Cependant il existe une ruse pour forcer le compilateur à garder une trace des noms des procédures et fonctions voulues afin que l'on puisse les appeler par leur nom.
Cette méthode consiste à exporter les noms de procédure comme on le ferait dans une dll. Une fois les fonctions exportées on utilise la même méthode pour les appeler que la méthode utilisée pour l'appel d'une fonction de dll.
Function Additionner(x, y: Integer): Integer;
Begin
Result:=x+y;
End;
Function Soustraire(x, y: Integer): Integer;
Begin
Result:=x-y;
End;
Function Multiplier(x, y: Integer): Integer;
Begin
Result:=x*y;
End;
Exports Additionner,SousTraire,Multiplier;
procedure TForm1.Button1Click(Sender: TObject);
var H: HModule;
F: Function(X,Y:Integer):Integer;
begin
H := GetModuleHandle(nil);
if H <> 0 then
begin
F := GetProcAddress(H, PChar(Edit1.Text));
if Assigned(F) then
ShowMessage(IntToStr(F(SpinEdit1.Value,SpinEdit2.Value)))
Else
ShowMessage('Fonction non trouvée !');
End;
// SetWindowLong(Memo1.Handle,GWL_STYLE,GetWindowLong(Memo1.Handle,GWL_STYLE)Or ES_UPPERCASE);
end;
Notez l'ajout de la clause Exports pour déclarer les fonctions comme on le ferait dans une dll.
Partager