Problème d'homonymie des fonctions delphi et api windows

Contenu du snippet

Il peut arriver qu'une fonction Delphi et qu'une fonction API Windows portent le même nom (avec cependant généralement des paramètres différents).
Un exemple simple nous est fourni par la procédure BEEP.
En Delphi, on écrit simplement BEEP, mais Windows définit une autre procédure BEEP comportant 2 paramètres.

EXEMPLE 1 (correct):
uses
Windows, Messages, SysUtils...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
beep;
end;

EXEMPLE 2 (=> erreur de compilation):
uses
Windows, Messages, SysUtils...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
beep(440,100);
end;

Le problème provient du fait que dans la clause uses, les 1ères définitions sont masquées par celles écrites après. Une solution serait d'inverser les définitions "Windows" et "SysUtils" dans uses, comme ci-dessous:

uses
SysUtils, Windows, Messages...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
beep(440,100);
end;

Mais il existe une solution très simple et beaucoup plus sûre qui évite de s'occuper de l'ordre des occurrences de uses. Selon que vous voulez utiliser la procédure sous Delphi ou Windows, vous écrirez:

procedure TForm1.Button1Click(Sender: TObject);
begin
SysUtils.beep; {pour Delphi}
end;

OU

procedure TForm1.Button1Click(Sender: TObject);
begin
Windows.beep(440,100); {pour Windows}
end;

Conclusion :


Je ne sais pas s'il y a beaucoup de téléscopages de ce genre dans Delphi. Mais il y en a!

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.