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