accès DLL - MB Electronique

Transcription

accès DLL - MB Electronique
MET/CAL v8 et FSC LIB DLL
Utilisation des fichiers de définition
Objectif : Montrer par un exemple comment renseigner MET/CAL au sujet des librairies dynamiques et des fonctions
utilisées dans une procédure.
Sans avoir préalablement installé les fichiers de définition XML dans
un projet, on peut obtenir le message d'erreur ci-contre lors de
l’exécution des lignes ci-dessous.
1.015
1.016
LIB
LIB
DLL kernel32="kernel32.dll";
kernel32.Beep(4000,100);
Dans ce cas, il convient d’ajouter les fichiers de définition
au projet par le menu déroulant
[Tools][Library FSC][Add/Update Definition Files In
Solution]
A l'issu de cette manipulation, on a ajouté deux fichiers
XML au projet.
Ces fichiers contiennent la définition de quelques
composants COM, fonctions et structures.
Il s'agit d'une copie de sauvegarde dont les originaux se
trouvent dans le répertoire Shared.
( C:\Documents and Settings\All
Users\Application Data\Fluke\METBASE\Shared
pour Windows XP)
•
libraryfsc.xml : Le fichier contient la définition des composants COM et des fonctions DLL employés, des
énumérations et des structures de données qui peuvent être utilisés par la FSC LIB.
Son contenu est contrôlé par le menu [Tools][Library FSC][Component Definition Wizard...].
•
datatypemapfsc.xml : Le fichier contient les différents types de données qui seront exploitables par les fonctions
DLL et les structures de données accessibles des procédures MET/CAL.
Cette fois-ci, lors de l’exécution des deux lignes, on risque
d’obtenir le message ci-contre.
1.015
1.016
LIB
LIB
DLL kernel32="kernel32.dll";
kernel32.Beep(4000,100);
Page 1 sur 4
Pourquoi ce message ?
Les fichiers de définition sont présents mais ils ne contiennent qu’un échantillon d’information concernant quelques
librairies.
Ici, ils n’ont aucune information concernant la librairie dynamique kernel32 que l’on souhaite utiliser.
Afin de déclarer l’emplacement de la librairie dynamique et la fonction
que l’on souhaite utiliser, on utilise donc le menu déroulant
[Tools][Library FSC][Component Definition Wizard...]
Après avoir effectué le choix Win32style Dynamic Link Library (DLL) , on
clique sur [Next].
Après avoir sélectionner [Manually
Define functions found in a Win32style DLL], on clique sur [Next].
On sélectionne [Define the functions
in a new Win32-style DLL], puis on
clique sur [Next].
Page 2 sur 4
Dans la fenêtre suivante
[Library FSC - Manual
Component Definition],
cliquer sur la loupe à côté du
champ [Library file Name] et
rechercher la DLL que l'on
souhaite exploiter avec
MET/CAL.
Dans notre exemple, il s'agit de la
librairie kernel32.dll qui se trouve dans
le sous-répertoire
« \WINDOWS\system32 » du système
d'exploitation Windows XP.
Au message [Do you want to get the exported
function names from the library?], répondre [Non]
à moins que l’on souhaite récupérer l’ensemble des
noms de fonctions présents dans la DLL Kernel32.
Cliquer ensuite sur le (+) à côté du
champ [Select a function] de manière
à définir la fonction qui sera utilisée.
Page 3 sur 4
On saisit alors les informations dans les
champs permettant de prototyper la
fonction conformément à la
documentation de son éditeur.
Champs à initialiser :
[Function name]
[Function return data type]
Arguments: [Name] et [Data Type].
Prototype de la fonction (documentation
Microsoft):
BOOL WINAPI Beep(
__in DWORD dwFreq,
__in DWORD dwDuration
);
Cliquer ensuite sur [OK].
Au message [The
Definition for the
"kernel32.dll" component
has been successfully
written to the definition
file], cliquer sur [OK].
Au message suivant, [Do you want to
add/update the Library FSC definition files
to this solution?], cliquer sur [Oui] de
manière à pouvoir conserver la définition de la
fonction dans les fichiers de définition XML du
projet.
Sans ce choix, les fichiers XML du répertoire
« shared » seront modifiés mais non ceux du
projet lui-même.
A la dernière boîte de dialogue, cliquer sur [OK].
De fait, les lignes suivantes ont été ajoutées au fichier libraryfsc.xml
MET/CAL est renseigné sur l’emplacement de la
DLL que l’on souhaite exploiter , il « sait »
également de quelle manière la fonction Beep peut
être appelée.
Dorénavant, l’exécution des deux lignes de la
procédure s’effectue sans erreurs.
Page 4 sur 4

Documents pareils