IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Le développement de Plugins pour 4D 2004

Date de publication : Mai 2006

Par Dominique Delahaye (Software Architect, Security Advisor)
 

Procédure pour la génération du squelette d'un plugin 4D 2004

Introduction
Les outils nécessaires
4D Plugin Wizard
La fenêtre de projet
Création de méthodes du plugin
Les Paramètres
Leur Portée
La valeur de retour des fonctions
La création de constantes
La Génération du squelette
Composition du squelette
Ouverture avec XCode
Ouverture avec Visual C++ 2005
Conclusion


Introduction

Aux vu des questions concernant la conception de plugins pour 4D, je vous soumets une procédure afin de vous faciliter la génération du squelette d'un plugin pour 4D 2004.

Ceci n'est qu'une ébauche que je m'engage à enrichir prochainement pour la partie zone externe.

Dans ce document, je vais tenter de vous mener à bien créer un squelette de plugin, qu'il soit compilable, debuggable et exécutable.


Les outils nécessaires

La documentation
en http://4d.developpez.com/documentation/4DDoc2004/XKC/XKCMDUS.HTM

4D Plugin Wizard
Disponible dans le répertoire "Utilitaires " après l'installation de 4D

XCode version 1.5 (minimum)
Il est aussi conseillé d'avoir accès à un éditeur de ressources du type "RESORCERER" : http://www.mathemaesthetics.com/ResorcererIndex.html

Microsoft Visual C++ 2005


4D Plugin Wizard

Lors de l'ouverture de 4D Plugin Wizard, vous avez à votre disposition la fenêtre de la liste de vos projets de plugin.

Dans un premier temps vous allez cliquer sur "New" afin d'en créer un nouveau.

Une nouvelle fenêtre s'affiche alors : la fenêtre de projet !

info Cependant une petite remarque utile :
chaque projet est ouvert dans un process indépendant et dans une transaction. Donc n'oubliez pas de valider votre travail à la fermeture du projet.


La fenêtre de projet

Cette fenêtre est composée de plusieurs zones que nous allons détailler ici.


Le Nom du Projet en haut à gauche.


En dessous la liste des méthodes que vous allez créer dans ce projet et ce géré par thème.


En effet chaque méthode doit se référer à un thème afin que l'utilisateur puisse plus facilement s'y retrouver.


En dessous une liste de boutons :
· Add theme : création d'un thème
· Add Command : création d'une commande dans le thème sélectionné dans la liste.
· Add External Area : permet d'ajouter une zone externe à 4D. Notez que les zones externes
  n'appartiennent à aucun thème.
· Edit constants : permet d'éditer des constantes liées à votre plugin.
· Import from plugin : permet de récupérer l'intégralité de la description d'un plugin existant.


A droite de la liste de vos thèmes / commandes figure une zone de pré-visualisation du code C correspondant au squelette de votre plugin.


Vous pouvez voir la description des headers ainsi que la partie la plus intéressante qu'est le code C du main.


En dessous de ces zones de prévisualisation, vous trouverez des options de préparation de code et événements du plugin :

· use Ansi
  Insère dans l’entête de votre code les “headers” permettant l’appel des fonctions ANSI.
#include <stdio.h>
#include <string.h>
· use Win32 API
  Insère dans l’entête de votre code le “headers” permettant l’appel de l’API de Windows.
#if VERSIONWIN
   #include <Windows.h>
#endif
· use Mac2Win from Altura Software
  Insère dans l’entête de votre code le “headers” permettant l’appel des fonctions Mac2Win.
#include "AsiPort.h"
· use enum for commands
  Les commandes de votre plugin sont référencées par un numéro allant de 1 à n.
  Cette option vous permet de définir une énumération “C” afin de visualiser un
  pseudonyme de votre commande plutôt qu’un numéro.

· define constants in 4D Plugin.h
  Cette option permet de définir vos constantes sous forme d’énumération “C”
  dans le fichier “.h” de votre plugin .


Votre plugin reçoit des événements afin de pouvoir gérer s'il vous est nécessaire des structures globales.

· need InitPlugin()
  4D vient de lancer votre base et vient d'executer votre plugin pour la première fois.

· need DeinitPlugin()
  4D va quitter il est donc de votre devoir de libérer ou fermer tout ce que vous gérer
  (espace mémoire, fichiers ouverts, sockets ouverts etc...).


Options de génération du squelette de votre plugin :

· Macintosh XCode 1.2 Project : création du fichier projet pour Xcode.

· Microsoft Visual C++ .NET projet : création du projet pour Microsoft Visual.

· 4D Plugin API Source files : création du dossier contenant les fichiers nécessaires à l'API de 4D

· Source files : création des fichier Squelette de votre plugin "4D Plugin.h" et "4D Plugin.c"

· Resources Files : création du fichier de ressources nécessaire à 4D pour identifier votre plugin ".rsrc" pour macintosh et ".RSR" pour windows.


Création de méthodes du plugin

Lors de la création d'une méthode, une fenêtre s'ouvre afin d'en définir ses caractéristiques.

Celle-ci vous permettra de définir son nom, le type de valeur de retour si c'est une fonction ainsi que la liste des paramètres attendus. Par soucis de cohérence avec la syntaxe établie dans le langage 4D, notez que les méthodes ont des noms entièrement en majuscules alors que les fonctions sont elles en minuscules.


Les Paramètres

Vous pouvez avoir jusqu'à 25 paramètres pour chaque commande.

Ces paramètres ont une portée que vous pouvez définir dans cette fenêtre (voir ci après).

De plus les paramètres sont forcéments typés.

Voici la liste des types possibles :

Type Langage 4D C
Date C_DATE PA_Date
Heure C_HEURE signed long
Entier C_ENTIER signed short
Entier long C_ENTIER LONG signed long
Blob C_BLOB PA_Handle
Image C_IMAGE PA_HANDLE + PA_PictureInfo
Réel C_REEL double
Alpha C_ALPHA char[256]
Texte C_TEXTE PA_Text
Tableau TABLEAU XXXX PA_Variable
Pointeur C_POINTEUR PA_Pointer


Vous pouvez consulter la liste des types au format C ici :
en http://4d.developpez.com/documentation/4DDoc2004/XKU/XKU00035.HTM

Vous pouvez consulter la liste des types au format 4D ici :
fr http://4d.developpez.com/documentation/4DDoc2004/V6F/V6F00009.HTM


Leur Portée

Dans cette même fenêtre, vous pouvez aussi définir la portée de vos paramètres à l'aide des flêches.

       -> Le paramètre a une valeur significative en entré.

       <- Le paramètre a une valeur significative en sortie.

       <-> Le paramètre a une valeur significative en entré et en sortie.


La valeur de retour des fonctions

Si vous associé un type différent de "None" votre commande est une fonction.

Voici la liste des types possible pour les retour de fonction :

Type Langage 4D C
Date C_DATE PA_Date
Heure C_HEURE signed long
Entier C_ENTIER signed short
Entier long C_ENTIER LONG signed long
Blob C_BLOB PA_Handle
Image C_IMAGE PA_HANDLE + PA_PictureInfo
Réel C_REEL double
Alpha C_ALPHA char[256]
Texte C_TEXTE PA_Text

La création de constantes

Il est probable, pour augmenter le confort d'utilisation de votre plugin, que vous ayez recours à la création de constantes.

Pour l'exemple je vous envoi directement à l'utilisation d'une méthode de 4D Write WR FIXER PROPRIETE TEXTE où la documentation se trouve ici :
fr http://4d.developpez.com/documentation/4DDoc2004/CMF/CMF89480.HTM

Afin de fixer les propriétés du texte, il est plus confortable pour la relecture du code de lire wr gras plutôt que (0).

Comme pour les commandes vous devez créer un thème pour classer vos constantes, puis ajouter les valeurs possibles.

Vous pouvez avoir des constantes de trois types : Chaîne de caractères, Réel ou Entier long.

warning Attention :
ne pas redéfinir des constantes existantes, penser donc à préfixer leur nom.


La Génération du squelette

Une fois que vous aurez défini vos commandes et vos constantes, appuyez sur le bouton "Generate".

Une fenêtre de destination s'ouvrira. Sélectionner l'endroit où vous voulez sauvegarder le squelette de votre projet.

Une fois généré, fermer votre fenêtre de projet en confirmant l'enregistrement.

Vous êtes alors prêt pour ouvrir votre squelette dans Visual ou XCode.


Composition du squelette

Avant d'aller plus loin regardons le contenu des dossiers et fichiers constituant le squelette de votre plugin.


· Dossier 4D Plugin API
      4DPluginAPI.c
      4DPluginAPI.def
      4DPluginAPI.h
      EntryPoints.h
      Flags.h
      PrivateTypes.h
      PublicTypes.h
· 4D Plugin_Prefix.pch
Ces fichiers constituent l'ensemble de l'API de 4D.
Vous pouvez consulter à titre d'informations 4DPluginAPI.h et par curiosité 4DPluginAPI.c.


· 4D Plugin.c 4D Plugin.h
Ces fichiers constituent le source de votre squelette de plugin.

warning Petite note importante : si vous désirez programmer en C++, il est nécessaire de renommer 4D Plugin.c en 4D Plugin.cpp et de modifier la liste des fichiers des projets XCode ou Visual.
· 4D Plugin.xcode
Ce fichier est le projet XCode donc pour une version Macintosh du plugin.


· 4D Plugin.rsrc
· Dossier English.lproj
      InfoPlist.strings
      locversion.plist
· Info.plist
· PkgInfo
Ces fichiers sont nécessaires au fonctionnement de votre plugin pour Macintosh


· 4D Plugin.vcproj
Ce fichier est le projet Microsoft Visual.


· Dossier build
       4D Plugin.bundle
             Contents
                   Windows
                         4D Plugin.rsr
Ces fichiers sont nécessaires au fonctionnement de votre plugin pour Windows et Macintosh.


Le sous répertoire 4D Plugin.bundle est en fait votre projet final et doit être organisé comme suit pour un plugin mac/win :

4D Plugin.bundle
       Contents
             Info.plist
             MacOS
                   4D Plugin (version mac)
             Resources
                   4D Plugin.rsrc
                   English.lproj
                         InfoPlist.strings
             Windows
                   4D Plugin (version win)
                   4D Plugin.rsr


Ouverture avec XCode

Lors de l'ouverture du projet avec XCode, il est probable que celui-ci vous demande "d'upgrader" celui-ci, accepter sans soucis.

Pour les utilisateurs de XCode 2.2 ou superieur, executer dans le terminal la ligne suivante pour aider au debuggage :
defaults write com.apple.Xcode UsePerConfigurationBuildLocations NO

Paramétrages du projet

Afin de debugger votre projet, il vous faut ajouter un exécutable.

Donc lors de l'ajout, selectionner une application 4D , monoposte client ou serveur puis rajouter au chemin :

      /Contents/MacOS/4th Dimension


Ouverture avec Visual C++ 2005

Ouverture avec Visual C++ 2005

Lors de l'ouverture du projet avec Visual, il est probable que celui-ci vous demande "d'upgrader" celui-ci, accepter sans soucis.

Ouvrez le fichier projet et demandez la génération de la solution.

Une erreur de compilation intervient.


Paramétrages du projet

Modifier dans les propriétés du plugin -> Edition de liens -> Entrées -> Dépendances supplémentaires

Supprimer odbc32.lib et odbcpp32.lib


Recompiler et votre projet est compilé


Conclusion

Vous pouvez "en théorie" exécuter votre plugin en mode debug dans les version Macintosh ou Windows.

Il ne vous reste alors qu'a enrichir les commandes du squelette qui ne demande qu'a prendre de l'en bon point.








©2006 Dominique Delahaye



Valid XHTML 1.1!Valid CSS!

Copyright © 2006 Dominique Delahaye. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.