jmfmarques
Messages postés
7666
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
5 juin 2007 à 22:44
Bonsoir Casy,
Voilà un extrait d'un .chm que j'ai écrit il y a longtemps...
J'espère que ce ne sera pas du chinois pour Mimosa :
L'appel de l'API est fondamentalement semblable à l'appel d'une fonction ordinaire, aves ses paramètres.
Nous appelons en réalité une fonction d'une librairie (DLL).
Il nous faut déclarer la fonction dont il s'agit et, pour ce faire, préciser les éléments suivants :
- Le nom de la fonction ou de la procédure contenue dans la Dll et que nous voulons utiliser.
- le nom de la librairie (DLL) dans laquelle se trouve cette fonction ou procédure
- les paramètres qui doivent être passés à la fonction ou procédure
- le type de la valeur qui sera renvoyée par la fonction ou procédure.
Examinons par exemple la déclaration de la fonction FindNextFile de la bibliothèque Kernel32.dll :
Cette fonction attend un paramètre hFindFile, de type long, un paramètre lpFindFileData correspondant à une structure WIN32_FIND_DATA et retourne un Long....
La syntaxe de sa déclaration est donc la suivante :
Declare Function FindNextFile Lib "Kernel322" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
ou encore, en utilisant un Alias (voir plus bas) :
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Encore faudra-t-il définir la structure, ainsi, par exemple en ce qui concerne WIN32_FIND_DATA :
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
et, du coup : faire au besoin des déclarations de constantes (ici par exemple la constante MAX_PATH) pour les membres de cette structure, voire, comme c'est le cas pour celle-ci, définir d'autres structures correspondant elles-mêmes à un élément de la structure principale (ici, par exemple : une structure FILETIME)
Il est évident que tous ces renseignements sont donc nécessaires. Ils peuvent être obtenus ici et là (sur le Net, dans des ouvrages spécialisés, etc....) et... ici-même, je l'espère, pour un grand nombre des fonctions et procédures les plus utilisées...)
UTILISATION D'ALIASIl est possible d'appeler une fonction en utilisant un pseudo (plutot que son nom réel).Ce pseudo doit alors être déclaré conjointement au nom réel de la façon suivante :Imaginons vouloir déclarer et appeler sous le nom Titi une fonction Toto de la librairie Machin.dllDéclare functionTitilib "Machin"Alias "Toto"(byval.....) as ....L'utilisation d'un alias peut avoir plusieurs raisons, parmi lesquelles les suivantes :- raisons de lisibilité : un mot plus "parlant" peut souvent faciliter la maintenance d'une application.
- éviter une ambiguïté : certaines fonctions comportent des
caractères qui pourraient être interprêtés différemment par VB (cas
par exemple du caractère "_" qui, sous VB, a une signification particulière !)Imaginons par exemple que nous ayons à déclarer
(et utiliser) la fonction _lOpen de la librairie Kernel32Si nous la déclarions ainsi :Declare Function _lopen Lib "kernel32" (ByVal _lpPathname As String, ByVal ireadWrite As Long) As LongVB lirait bien évidemment :Declare Function lopen Lib "kernel32" (ByVal _lpPathname As String, ByVal ireadWrite As Long) As Longce qui provoquerait une erreur !