Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 743
    Points : 683
    Points
    683
    Billets dans le blog
    19

    Par défaut Déclaration API registre & fonctions en 32 & 64 bits

    Bonjour

    J'ai besoin de faire tourner un projet sous 32 & 64 bits en utilisant les API de registre. Je me suis inspiré du tuto de arkham46 ici pour typer mes variables selon l'environnement en utilisant la commande DefType.

    Voilà un bout de code mon code

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #If Win64 Then
            DefLngPtr Z
        #Else
            DefLng Z
        #End If
     
        #If Win64 Then      
     
            Private Declare PtrSafe Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As LongPtr) As Long
            Private Declare PtrSafe Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As LongPtr, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As LongPtr, lpdwDisposition As Long) As LongPtr
            Private Declare PtrSafe Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As LongPtr, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As LongPtr
            Private Declare PtrSafe Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal lpReserved As LongPtr, lpType As Long, ByVal lpData As String, lpcbData As Long) As LongPtr
            Private Declare PtrSafe Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal lpReserved As LongPtr, lpType As Long, lpData As Long, lpcbData As Long) As LongPtr
            Private Declare PtrSafe Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal lpReserved As LongPtr, lpType As Long, ByVal lpData As Long, lpcbData As Long) As LongPtr
            Private Declare PtrSafe Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal Reserved As LongPtr, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As LongPtr
            Private Declare PtrSafe Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As LongPtr, ByVal lpValueName As String, ByVal Reserved As LongPtr, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As LongPtr
     
     #Else
     
            Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
            Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
            Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
            Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
            Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
            Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
            Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
            Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
        #End If
     
    Public Function SetValueEx(ByVal zhKey, sValueName As String, zlType, vValue As Variant) As z
     
        Dim zlValue
        Dim sValue As String
     
        Select Case zlType
            Case REG_SZ
                sValue = vValue & Chr$(0)
                SetValueEx = RegSetValueExString(zhKey, sValueName, 0&, zlType, sValue, Len(sValue))
            Case REG_DWORD
                zlValue = vValue
                SetValueEx = RegSetValueExLong(zhKey, sValueName, 0&, zlType, zlValue, 4)
     
            End Select
     
       End Function

    Mais à la compilation j'ai le message d'erreur suivant : Type défini par l'utilisateur non défini qui est du à la déclaration de la valeur retorunée par SetValueEx

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    SetValueEx(ByVal zhKey, sValueName As String, zlType, vValue As Variant) As z

    Merci par avance pour toute aide
    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Invité
    Invité(e)

    Par défaut

    Bonjour,
    Oui c'est interresant que signifi Z?

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 743
    Points : 683
    Points
    683
    Billets dans le blog
    19

    Par défaut

    Bonjour rdurupt

    J'ai donc déclaré

    #If Win64 Then
    DefLngPtr Z
    #Else
    DefLng Z
    #End If

    Je veux indiquer que SetValueEx(ByVal zhKey, sValueName As String, zlType, vValue As Variant) As z retourne
    • ptrlong en Win64
    • long autrement


    Je perçois bien que ma déclaration cloche? Faut il aussi la déclarer entre
    #If Win64 Then
    #Else
    #End If

    Si oui merci de m'indiquer comment faire. L'objectif était justement de na pas faire une doouble déclaration!

    Merci pour ton aide
    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  4. #4
    Invité
    Invité(e)

    Par défaut

    DefLngPtr et DefLng premettent de typer dynamiquement un variable! Z est une variable pas un type de variables

    ne te perends pas la tête!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetValueEx(ByVal zhKey, sValueName As String, zlType, vValue As Variant) As Variant

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 743
    Points : 683
    Points
    683
    Billets dans le blog
    19

    Par défaut

    Merci rdurupt pour cette astuce que je garde dans un coin de ma tête.

    Sinon j'ai résolu mon problème car il s'avère qu'en 32 ou 64 bits, les API renvoient du long.
    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Analyste et Développeur Java
    Inscrit en
    novembre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Analyste et Développeur Java

    Informations forums :
    Inscription : novembre 2006
    Messages : 53
    Points : 38
    Points
    38

    Par défaut

    Bonjour,

    J'ai remarqué vous faites cette notation pour décider que toutes les variables commençant par Z seront de type LongPtr pas Long au niveau de la déclaration.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #If Win64 Then
            DefLngPtr Z
    #Else
            DefLng Z
    #End If
    est ce qu'elle est correcte ou bien il faut donner un autre caractère différant de Z au variable DefLng.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [API Win]Fonction pour connaître l'uptime?
    Par oiffrig dans le forum Windows
    Réponses: 2
    Dernier message: 24/10/2005, 09h52
  2. Fonctions de gestion de fichiers
    Par sebduth dans le forum Fortran
    Réponses: 4
    Dernier message: 22/08/2005, 10h38
  3. Réponses: 4
    Dernier message: 26/07/2005, 13h38
  4. [API Windows] Fonction Rectangle
    Par Zazeglu dans le forum Windows
    Réponses: 4
    Dernier message: 29/01/2004, 21h44
  5. fonction de gestion du temps
    Par fati dans le forum C
    Réponses: 5
    Dernier message: 26/12/2002, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo