J’estime que passer de Delphi à FreePascal/Lazarus se fait sans accrocs majeurs et, à certains égards, s’avère tout à fait agréable. Mais il y a de petites différences qui peuvent être la source de casses-tête. Voici quelques écueils qui m’ont piégé dans le passé et me font encore trébucher à l’occasion.
Table of Contents
- Affectation de types procéduraux en mode
objfpc - Récursion en mode
objfpc - Affectation des types procéduraux en mode
objfpcà l'exécution - Pas de mode de création Debug et Release
- Exemple
Affectation de types procéduraux en mode objfpc
En mode objfpc, les types procédure doivent être affectés avec
l’opérateur d’adresse @ comme l’indique clairement le manuel.
L'opérateur n’est pas nécessaire en modes delphi ou turbo pascal. Les
gestionnaires d'événements sont des types procéduraux de sorte que la même
règle s’applique pour eux. Cependant, dans ce cas, le message d'erreur en
absence de l'opérateur d’adresse, Error: Wrong number of parameters
specified for call to "EditChange" me confond souvent et me dirige
vers un comptage inutile des paramètres en me demandant pourquoi il y a un
problème. Après tout, le gestionnaire EditChange a exactement
un paramètre tel qu’exigé d'un gestionnaire de type TNotifyEvent.
Récursion en mode objfpc
Une fonction sans paramètre ne peut s’appeler récursivement à moins d’ajouter des parenthèses vides au nom de la fonction :
Cette convention d'appel de style C n’est pas nécessaire dans Delphi et
n'est pas nécessaire dans un programme Free Pascal quand le mode Delphi {$mode Delphi} est utilisé au lieu du mode par défaut {mode $ objfpc}.
Affectation des types procéduraux en mode objfpc à l'exécution
Ceci est à peu près le même problème que ci-dessus. Si un type procédure est définie pour les fonctions sans paramètre, il est nécessaire d'ajouter des parenthèses à la variable procédurale pour appeler la fonction.
Pas de mode de construction Debug et Release
Les modes de construction Debug et Release ne sont pas définis par défaut dans un nouveau projet. Cependant, ils sont facilement créés en cochant Modes de création dans Options pour le projet : MonProject. Vous pouvez accéder à cette fenêtre dans l'EDI de Lazarus en sélectionnant les options de menu suivantes : Projet / Options du projet ... / Options du compilateur. Une fenêtre intitulée Mode Construction apparaît. Cliquez sur bouton libellé Create Debug et Release modes pour ajouter ces deux modes de construction au mode par défaut.
Même après avoir ajouter les modes, les symboles DEBUG et RELEASE non définis dans les modes de construction correspondants. Pour ajouter ces symboles, cliquez sur le choix des Options personnalisées dans les options du compilateur (voir ci-dessus). Ensuite, cliquez sur le bouton Définitions... pour définir et ajouter les deux symboles DEBUG et RELEASE. Fermez la fenêtre Définitons : en cliquant sur le bouton OK et sélectionnez le mode Debug dans la liste déroulante du mode de création. Cliquez sur le bouton Définitions... à nouveau et cochez le symbole DEBUG et décochez le symbole RELEASE si nécessaire et cliquez sur le bouton OK. Le mémo des Options personnalisées doit alors contenir -dDEBUG. Sélectionnez le mode de création Release et cliquez sur Définitions ... et, cette fois, cochez le symbole RELEASE et décochez le symbole DEBUG. Cliquez sur le bouton OK et vérifiez que -dRELEASE apparaît dans le mémo d’Options personnalisées.
Exemple
L'archive gotcha.zip contient un petit programme qui illustre les problèmes et solutions. Assurez-vous d'exécuter le programme quatre fois, une fois avec la directive {$mode objfpc} défini et {$mode delphi} non defini puis inversez ces définitions dans Unit1.pas puis à nouveau dans Unit2.pas. Les modes de construction Debug et Release sont définis dans ce projet ainsi que les symboles DEBUG et RELEASE correspondants.
