
|
auteurs :
Hdd34, King Kaiser | Il est souvent nécessaire de savoir détecter les erreurs que votre programme est susceptible de produire, notamment suite à une entrée imprévue par l'utilisateur.
Les erreurs qu'il est simple de détecter sont généralement les erreurs d'entrée/sortie (E/S). Afin de détecter de telles erreurs, on se sert de la directive $I et de la fonction IOResult, qui renvoie le dernier code d'erreur obtenu, une valeur nulle signifiant une absence d'erreur.
Il est très courant d'avoir recourt à $I pour la gestion des fichiers. Mais on peut également s'en servir avec une lecture de variable au moyen de ReadLn.
- Les erreurs de lecture/écriture des fichiers
L'exemple suivant ouvre un fichier et le referme. En temps normal, si le fichier n'existe pas, une erreur est déclenchée. Avec l'utilisation de $I, cette erreur devient silencieuse, ce qui vous permet de la gérer sans interruption incontrôlable du programme.
var
f: Text;
begin
...
{$I-}
Assign(f, 'FICHIER.TXT');
Reset(f);
Close(f);
{$I+}
if IOResult <> 0 then
begin
WriteLn('Le fichier n''a pas pu être ouvert !');
WriteLn('Appuyez sur Entrée.');
ReadLn;
end;
...
end.
- Lecture d'une variable au clavier
Il arrive que l'on veuille obtenir de l'utilisateur une valeur, un nombre par exemple. En temps normal, si l'utilisateur décide à ce moment là de rentrer une chaîne quelconque, le programme s'interrompt de manière incongrue. L'utilisation de $I permet de se sortir de ce mauvais pas, comme le montre l'exemple suivant :
var
i: Integer;
begin
...
{$I-}
repeat
Write('Entrez un entier : ');
ReadLn(i);
until IOResult = 0;
{$I+}
...
end.
Remarque :
-
Il existe d'autres variables permettant de savoir si une opération s'est bien déroulée. N'hésitez pas à y faire appel, car elles vous éviteront de nombreuses mauvaises suprises. On peut notamment citer DosError de l'unité Dos, ou bien encore GraphResult de l'unité Graph.
Il ne faut en effet jamais oublier que l'utilisateur final est la seule personne capable de produire un bug auquel vous n'auriez jamais pensé...
|
|
auteur :
Hdd34 | Turbo Pascal, dans sa version gratuite, n'est pas en mesure de créer des applications Windows.
Pour créer des applications Windows, vous avez le choix entre :
- Pour des programmes 16 bits (Windows 3.1) :
- Turbo Pascal pour Windows (*)
- Borland Pascal (*)
- Delphi 1 (*)
- Pour des programmes 32 bits (Windows 9x à XP) :
- Delphi 2 à 5 (*)
- Delphi 6, 7 et 2005
- FreePascal
- GNU Pascal
- Lazarus
- TMT Pascal
- ...
- Pour des programmes .NET (Windows XP) :
- Delphi 8(*)
- Delphi 2005
Les programmes suivis de (*) ne sont disponibles que sous licences disponibles auprès de leurs éditeurs, et donc payant. Les autres sont soit gratuits, soit disponibles dans une version gratuite ou bien personnelle (leur usage commercial est alors interdit).
|
lien : Les compilateurs Pascal
|
|
auteur :
Hdd34 | Il est impossible d'intégrer directement du code en C dans un programme Pascal comme pour l'assembleur. Toutefois, il est possible de "ruser". Pour ce faire, il faut créer en aval un module en C et le compiler sous forme de fichier objet compatible Intel *.OBJ
Certaines règles doivent cependant s'appliquer, et il est impossible d'y déroger :
- Le module en C doit être compilé sous un modèle de mémoire small
- Le module C doit être compilé avec un compilateur 16 bits si le compilateur Pascal est un compilateur 16 bits, respectivement 32 bits si le compilateur Pascal est 32 bits.
- Toutes les données (variables, constantes, types, classes...) du module C seront inaccessibles dans le code Pascal, mais par contre les variables du module Pascal seront accessibles depuis le module C. Par conséquent, toute donnée devant être partagée devra être déclarée dans le module Pascal.
- Il faut déclarer toutes les routines destinées à être partagées en mode d'appel far.
- Il est a priori impossible d'utiliser des routines de la runtime library (RTL) C/C++ à cause de conflit de noms
Une fois toutes ces remarques prises en considération, il suffit de créer un module en C, en déclarant en tant que extern tous les éléments se situant dans le module Pascal, en prenant garde à la casse (majuscules et minuscules). Il faut ensuite le compiler sous forme de fichier objet.
Dans le module Pascal, il suffit de déclarer toutes les procédures et variables nécessaires puis d'intégrer au code le fichier objet grâce à la directive de compilation {$L MODULE_C.OBJ} où MODULE_C correspond au nom de votre module C.
L'exemple suivant illustre l'intégration d'un module C dans un programme en Pascal.
Module C
typedef unsigned int word;
extern void Clear(word Color);
extern word Color;
void CallClear()
{
if (Color == 15) Color = 1;
else Color++;
Clear(Color);
}
Module Pascal program IntegrationC;
uses
Crt;
var
Color: Word;
procedure Clear(Color: Word);
begin
TextBackground(Color);
ClrScr;
end;
procedure CallClear; external;
{$L MODC.OBJ}
begin
Color := 1;
CallClear;
ReadLn;
end.
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2004
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|