Accueil
Accueil
Le
Club
Delphi
Kylix
C
C++
Java
J2EE
DotNET
& C#
Visual
Basic
Access
Pascal
Dev
Web
PHP
ASP
XML
UML
SQL
SGBD
Win
Linux
Autres

        


Comment détecter les erreurs du programme en temps réel ?
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-} { On désactive les erreurs } { On ouvre un fichier et on le referme } Assign(f, 'FICHIER.TXT'); Reset(f); Close(f); {$I+} { On réactive les erreurs } { Si une erreur s'est produite, on affiche un message } 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-} { On désactive les erreurs d'E/S } { On va répéter la phase d'entrée tant qu'un nombre ne sera pas entré... } repeat Write('Entrez un entier : '); ReadLn(i); until IOResult = 0; {$I+} { On réactive les erreurs } ... 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é...


Puis-je créer un programme pour Windows avec Turbo Pascal ?
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

Comment intégrer du code C dans mon code source 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}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
/* Module MODC.C */ typedef unsigned int word; extern void Clear(word Color); /* Procédure du module Pascal */ extern word Color; /* Variable déclarée dans le module Pascal */ void CallClear() { /* Modifie une variable Pascal */ if (Color == 15) Color = 1; else Color++; /* Appelle une procédure Pascal */ Clear(Color); }
Module Pascal
program IntegrationC; uses Crt; { Variable partagée } var Color: Word; { Procédure partagée } procedure Clear(Color: Word); begin TextBackground(Color); ClrScr; end; { Intégration de la procédure en C } 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.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright 2000..2005 www.developpez.com