HDAPI en Delphi


Présentation Générale

Utilisation d'HDAPI en : [C/C++] [ Delphi] [Visual Basic]


///////////////////////////////////////////////////////////////////////////
// Démo HDAPI Delphi
///////////////////////////////////////////////////////////////////////////
// 08/11/2002
//
// Copyright (c) 2002, E. Ravon (Bat)
//
// Auteur : manu_bat_manu@yahoo.fr
//
// Démonstration minimale de l'utilisation d'HDAPI en Delphi
//
// Ce code est un exemple d'accès en Delphi aux données du logiciel HelloDOC
// Il utilise la bibliothèque HDAPI.
//
// Ce code a été développé pour HelloDOC Etendu 4.56.791
// Ainsi que pour la version d'HDAPI.DLL associée.
//
// Il a été testé avec HD 4.56 étendu
// Son fonctionnement n'est pas guaranti avec des versions plus récentes d'HD
//
//
// HelloDOC est développé par Imagine Editions.
// Windows est une marque de Microsoft Corporation ////////////////////////////////////////////////////////////////////////////


Fichiers : HD_Delphi.zip (source + exécutable)

Version exécutable (Project1.exe)

Project1.exe - Fenêtre principale

  • Cet exemple permet d'exporter le contenu de l'Agenda du jour, de façon identique à l'exemple en C.
  • Il ne gère pas :
    • La mémorisation en Base De Registre des paramètres du cabinet.

Sources

  • Unit1.pas

La partie détaillée ici est l'import des fonctions d'HDAPI. Hormis HDAPI.DLL et la documentation (hdapi.pdf) associée, rien d'autre n'est indispensable. Le fichier hdapi.h peut être utilisé comme référence, mais ne sert pas directement.

Toutes les fonctions exportées par HDAPI peuvent être incluse dans un projet Delphi. Il est nécessaire de :

  • donner le prototype de la fonction dans la partie interface
  • donner son implémentation dans la partie implémentation. Le code associé étant dans HDAPI.DLL, l'implémentation se résumera à indiquer la DLL associée.

Ceci pour chaque fonction d'HDAPI. Cette tâche est réalisée en language C par l'intérmédiaire d'HDAPI.H, en Delphi se travail doit être refait (soit automatiquement à partir d'hdapi.h, soit manuellement).

Plusieurs cas peuvent se présenter selon les fonctions d'HDAPI.

  • Pour des fonctions simples ne retournant pas de valeur [en C : void fonction(param);] on utilisera une procédure
    • interface : procedure HDCloseSession(); stdcall; // stdcall correspond à la méthode utilisée pour passer les paramètres à la fonction/procédure
    • implementation : procedure HDCloseSession; external 'HDAPI.dll';
  • Pour des fonctions retournant une valeur [en C : type fonction(param);] on utilisera une fonction
    • interface : function HDOpenSession(network : boolean):boolean; stdcall;
    • implementation : function HDOpenSession; external 'HDAPI.dll';
  • Certaines fonctions nécessitent des types de données particuliers définis dans HDAPI.DLL. Ces types se retrouvent dans HDAPI.H, et doivent être redéfini, de façon équivalente en Delphi.
    • HDNumberOfKey nécessite un argument indiquant le fichier considéré. Cet argument est un entier qui prend une valeur issue d'une énumération. En C, cette énumération est définie par enum {TYPE1,TYPE2,etc};
    • En Delphi, cette énumération sera définie par type HdFileType = ( TYPE1,etc)
    • Les structures du C (struct), seront traduites en packet record. Il est nécessaire d'utiliser 'packed', car l'alignement ne sera pas correct dans les autres cas (en C celà se traduit par #pragma pack(1))