La syntaxe proposée ici est voisine de celle commandant la centrale de mesure Orphy-GTS de Micrelec ; si l'opération qu'elles doivent faire est incorrecte (voie inexistante, par exemple) elles renvoient une valeur fixe (par exemple -777 pour ce qui est des fonctions numériques).
Pour les réels ( de type "double"), la fonction sera précédée de P (comme "Pointeur") lorsqu'elle renverra l'adresse du résultat et non celui-ci directement.
Lors du chargement de la DLL, chaque fonction est identifiée
par son nom, qui est une chaîne de caractères. Il y a une
différence entre les majuscules et les minuscules ; il vaut mieux
convenir que tous les noms de fonctions seront en minuscule.
Chaque variante de fonction de mesure sera associée à un nom particulier. Un premier intérêt en est d'indiquer clairement à quoi correspond la variante. Par exemple, pour les interfaces ayant plusieurs calibres sélectionnables logiciellement (Leybold-Cassy...), chaque voie de mesure correspondra à un calibre, qui sera indiqué dans ce nom, ou bien pour les interfaces ayant plusieurs voies, spécialisées chacune dans un type de mesure (Orphy-GTS, qui a des calibres différents selon les connecteurs, ou bien Pierron SMF10, qui a des entrées spécialisées pour le pH ou le magnétisme...), ce nom indiquera ces spécialités.
Un deuxième avantage, plus universel, est que ce nom permettra au programme appelant de savoir quelles sont les voies réellement appelables. Toutes les voies ayant un nom (non nul) seront appelables, et les voies qui n'existent pas réellement auront un nom de longueur nulle.
Le plus simple est de faire commencer le nom de la fonction qui renvoie
le nom de la voie par la lettre N, comme "Nom". Le format de ces nom sera
le type "chaîne à zéro terminal" ou "Asciiz", déclaré
dans le langage Pascal comme Pchar.
function stdea(n:integer) : integer ;stdcall;export;
nième entrée analogique (résultat directement
renvoyé par le convertisseur analogique-numérique)
function stdnea(n:integer):pchar ;stdcall;export;
nom de la nième entrée analogique
function stdead(n:integer):double ;stdcall;export;
nième entrée analogique (résultat converti en
unité SI, le plus souvent en Volts)
function stdnead(n:integer):pchar ;stdcall;export;
nom de la nième entrée analogique renvoyant le résultat
sous forme de "double"
function stdsa(n:integer;valeur:integer):integer;stdcall;export;
envoi de valeur au convertisseur numérique analogique sur la
nième sortie analogique ; si tout s'est bien passé, elle
renvoie valeur.
function stdnsa(n:integer):pchar;stdcall;export;
nom de la nième sortie analogique fixant directement la valeur
du CNA.
function stdsad(n:integer; valeur:double):double;stdcall;export;
Elle permet la fixation de la nième sortie analogique à
valeur. Pour la plupart des interface, la valeur sera en volts, mais on
peut imaginer des systèmes plus complexes, où une sortie
puisse commander une température, une vitesse de rotation, une intensité
lumineuse, ou d'autres grandeurs pouvant varier.
function stdnsad(n:integer):pchar;stdcall;export;
C'est le nom de la fonction précédente
function stdeb(n:integer):integer ;stdcall;export;
nième entrée binaire (ou entrée logique). Le résultat
"vrai" correspondra à 1, et le résultat "faux" correspondra
à zéro.
function stdneb(n:integer):pchar;stdcall;export;
C'est le nom de la nième entrée binaire
function stdsb(n:integer;valeur:integer):integer;stdcall;export;
fixation de la nième sortie binaire à "vrai" si valeur
vaut 1, et à "faux" si valeur vaut zéro ; si tout s'est bien
passé, elle renvoie valeur
function stdnsb(n:integer):pchar;stdcall;export;
nom de la nième sortie binaire.
function stdtitre : pchar;stdcall;export;
renvoie le titre de la DLL, que l'on pourra utiliser dans des boites
de dialogue.
function stddetail : pchar ;stdcall;export;
renvoie le nom détaillé de la DLL, avec par exemple le
nom de l'auteur, la date de révision, etc.
J'ai donc introduit les fonctions suivantes, qui commencent par R,
comme "réponse" :
function stdrsa(n:integer):integer;stdcall;export;
renvoie l'état de la nième sortie analogique
function stdrsad(n:integer):double;stdcall;export;
renvoie l'état de la nième sortie analogique, convertie
en volts ou autre unité appropriée
function stdrsb(n:integer):integer;stdcall;export;
renvoie l'état de la nième sortie binaire, 0 pour hors-tension,
1 pour sous-tension.
Utilisation avec les tableurs Excel, QuattroPro et Lotus
Les tableurs sont des logiciels spécialisés dans la représentation
graphique et les calculs sur des séries de données. Il est
tentant de faire arriver directement les mesures dans les cases des tableurs.
Avec Windows 3.1, c'était réalisable moyennant quelques
aménagements.
function PEAD(n:integer):pdouble ;
pointeur sur la valeur renvoyée par la nième entrée
analogique.
function PSAD(n:integer; valeur:pdouble):pdouble
Pointeur ayant comme paramètre un pointeur sur la valeur à
fixer.
Est-ce encore possible avec les versions récentes de Excel ?
Toujours vers 1992, QuattroPro pour Windows 5 pouvait faire des mesures,
à condition de mettre un fonction particulière dans la DLL...
La version 7 de QuattroPro indique que ce logiciel peut lire des DLL, mais
je n'ai pas réussi à le faire.
Lotus 123-97 et le langage LotusScript devraient aussi pouvoir lire
des DLL, mais là encore, les explications ne permettent pas de le
faire effectivement...
Visual Basic aussi semble exiger la déclaration des fonctions
avec l'option stdcall, ainsi que MSWLogo.