Importation des API windows dans VBA en 64 bits

Actualités concernant le logiciel Visilog de FEI - VSG
Exemples, problématiques, astuces, ....

Importation des API windows dans VBA en 64 bits

Message par ReactivIP » 02 Juillet 2015, 12:26

Puisque systématiquement je dois retrouver comment déclarer l'importation d'une API windows dans VBA, voici un post qui me servira de pense-bête.
Si en même temps il peut vous être utile, ce sera encore mieux

Pour trouver le prototype des API, le plus simple est d'utiliser l'utilitaire ApiViewer. Malheureusement, cet utilitaire n'a pas été mis à jour (à ma connaissance) pour le 64 bits.
Il faut donc adapter un peu les déclarations

Le premier point est de ne pas oublier d'ajouter le PtrSafe dans la déclaration en 64 bits

Voici un exemple tout simple pour la fonction GetTickCount.

Code : Tout sélectionner
#If Win64 Then
       Declare PtrSafe Function GetTickCount Lib "kernel32.dll" () As Long
#Else
       Declare Function GetTickCount Lib "kernel32.dll" () As Long
#End If


Deuxième point important, il faut remplacer tous les pointeurs apparaissant en Long en 32bits par le type LongPtr


Code : Tout sélectionner
#If Win64 Then
       Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey as LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As Long
#Else
       Declare Function RegOpenKeyA Lib "advapi32.dll" (ByVal Key As Long, ByVal SubKey As String, NewKey As Long) As Long
#End If


Warning 1: les codes de retour de type Long restent en Long en 64 bits. Seuls les pointeurs changent.
Warning 2: les structures importées doivent elles aussi être adaptées.
ReactivIP
Administrateur
 
Message(s) : 87
Inscription : 30 Avril 2013, 12:07

Retour vers Logiciel Visilog

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron