Bonjour,
je suis toujours en prise avec les API du registre. Cette fois-ci, c'est la
fonction RegQueryValueEx qui me pose probleme. Voici le morceau de code en
question :
For i = 2 To rsUsers.RecordCount
MySubKey = "00" & CStr(i) & vbNullChar
Reponse = RegOpenKeyEx(Resp, MySubKey, 0, KEY_QUERY_VALUE, Rep)
If Reponse = ERROR_SUCCESS Then
MySubKey = "Name" & vbNullChar
RetValue = RegQueryValueEx(ByVal Rep, ByVal MySubKey, 0, 0,
ByVal strNameFound, lngData)
Else
MsgBox "Erreur lors de l'accès au Registre !", vbCritical + vbOKOnly,
"Erreur"
End If
RegCloseKey Rep
RegCloseKey Resp
Next i
Ce bout de code plante systématiquement VB qui se ferme, et hop, retour sur
le bureau !
La ligne fautive est le RegQueryValueEx, mais je n'arrive pas à déterminer
pourquoi...
Jusqu'à cette ligne, tout se passe comme il faut.
Les exemples que m'avais indiqués François sur support.microsoft.com m'ont
paru plutot confus...
Quelqu'un pourrait-il éclairer ma lanterne ?
Quel est ton but dans la base de registre ? pourquoi n'utilises-tu pas les fonctions GetSetting...
-----Message d'origine----- Bonjour, je suis toujours en prise avec les API du registre. Cette
fois-ci, c'est la
fonction RegQueryValueEx qui me pose probleme. Voici le
morceau de code en
question :
For i = 2 To rsUsers.RecordCount MySubKey = "00" & CStr(i) & vbNullChar Reponse = RegOpenKeyEx(Resp, MySubKey, 0,
KEY_QUERY_VALUE, Rep)
If Reponse = ERROR_SUCCESS Then MySubKey = "Name" & vbNullChar RetValue = RegQueryValueEx(ByVal Rep,
ByVal MySubKey, 0, 0,
ByVal strNameFound, lngData) Else MsgBox "Erreur lors de l'accès au Registre !",
vbCritical + vbOKOnly,
"Erreur" End If RegCloseKey Rep RegCloseKey Resp Next i
Ce bout de code plante systématiquement VB qui se ferme,
et hop, retour sur
le bureau ! La ligne fautive est le RegQueryValueEx, mais je n'arrive
pas à déterminer
pourquoi... Jusqu'à cette ligne, tout se passe comme il faut. Les exemples que m'avais indiqués François sur
support.microsoft.com m'ont
paru plutot confus... Quelqu'un pourrait-il éclairer ma lanterne ?
Merci
Jacques .
Zoury
Salut Jacques! :O)
Comment as-tu déclaré RegQueryValueEx?
Aussi, si tu veux, tu peux jeter un oeil à ma classe CRegistry, tu peux copier la dernière version à partir d'ici : http://groups.google.com/groups?selm=%2333VNZD1CHA.1768%40TK2MSFTNGP12
Les commentaires, comme tu pourras le remarquer sont souvent très à côté de la plaque... (la "magie" du copier/coller)
Merci de poster les réponses au groupe afin d'en faire profiter à tous "Jacques" wrote in message news:L%7jb.5678$
Bonjour, je suis toujours en prise avec les API du registre. Cette fois-ci, c'est
la
fonction RegQueryValueEx qui me pose probleme. Voici le morceau de code en question :
For i = 2 To rsUsers.RecordCount MySubKey = "00" & CStr(i) & vbNullChar Reponse = RegOpenKeyEx(Resp, MySubKey, 0, KEY_QUERY_VALUE, Rep) If Reponse = ERROR_SUCCESS Then MySubKey = "Name" & vbNullChar RetValue = RegQueryValueEx(ByVal Rep, ByVal MySubKey, 0, 0, ByVal strNameFound, lngData) Else MsgBox "Erreur lors de l'accès au Registre !", vbCritical + vbOKOnly, "Erreur" End If RegCloseKey Rep RegCloseKey Resp Next i
Ce bout de code plante systématiquement VB qui se ferme, et hop, retour
sur
le bureau ! La ligne fautive est le RegQueryValueEx, mais je n'arrive pas à déterminer pourquoi... Jusqu'à cette ligne, tout se passe comme il faut. Les exemples que m'avais indiqués François sur support.microsoft.com m'ont paru plutot confus... Quelqu'un pourrait-il éclairer ma lanterne ?
Merci
Jacques
Salut Jacques! :O)
Comment as-tu déclaré RegQueryValueEx?
Aussi, si tu veux, tu peux jeter un oeil à ma classe CRegistry, tu peux
copier la dernière version à partir d'ici :
http://groups.google.com/groups?selm=%2333VNZD1CHA.1768%40TK2MSFTNGP12
Les commentaires, comme tu pourras le remarquer sont souvent très à côté de
la plaque... (la "magie" du copier/coller)
Merci de poster les réponses au groupe afin d'en faire profiter à tous
"Jacques" <lordjf@tele2.fr> wrote in message
news:L%7jb.5678$d1.3118@nntpserver.swip.net...
Bonjour,
je suis toujours en prise avec les API du registre. Cette fois-ci, c'est
la
fonction RegQueryValueEx qui me pose probleme. Voici le morceau de code en
question :
For i = 2 To rsUsers.RecordCount
MySubKey = "00" & CStr(i) & vbNullChar
Reponse = RegOpenKeyEx(Resp, MySubKey, 0, KEY_QUERY_VALUE, Rep)
If Reponse = ERROR_SUCCESS Then
MySubKey = "Name" & vbNullChar
RetValue = RegQueryValueEx(ByVal Rep, ByVal MySubKey, 0, 0,
ByVal strNameFound, lngData)
Else
MsgBox "Erreur lors de l'accès au Registre !", vbCritical + vbOKOnly,
"Erreur"
End If
RegCloseKey Rep
RegCloseKey Resp
Next i
Ce bout de code plante systématiquement VB qui se ferme, et hop, retour
sur
le bureau !
La ligne fautive est le RegQueryValueEx, mais je n'arrive pas à déterminer
pourquoi...
Jusqu'à cette ligne, tout se passe comme il faut.
Les exemples que m'avais indiqués François sur support.microsoft.com m'ont
paru plutot confus...
Quelqu'un pourrait-il éclairer ma lanterne ?
Aussi, si tu veux, tu peux jeter un oeil à ma classe CRegistry, tu peux copier la dernière version à partir d'ici : http://groups.google.com/groups?selm=%2333VNZD1CHA.1768%40TK2MSFTNGP12
Les commentaires, comme tu pourras le remarquer sont souvent très à côté de la plaque... (la "magie" du copier/coller)
Merci de poster les réponses au groupe afin d'en faire profiter à tous "Jacques" wrote in message news:L%7jb.5678$
Bonjour, je suis toujours en prise avec les API du registre. Cette fois-ci, c'est
la
fonction RegQueryValueEx qui me pose probleme. Voici le morceau de code en question :
For i = 2 To rsUsers.RecordCount MySubKey = "00" & CStr(i) & vbNullChar Reponse = RegOpenKeyEx(Resp, MySubKey, 0, KEY_QUERY_VALUE, Rep) If Reponse = ERROR_SUCCESS Then MySubKey = "Name" & vbNullChar RetValue = RegQueryValueEx(ByVal Rep, ByVal MySubKey, 0, 0, ByVal strNameFound, lngData) Else MsgBox "Erreur lors de l'accès au Registre !", vbCritical + vbOKOnly, "Erreur" End If RegCloseKey Rep RegCloseKey Resp Next i
Ce bout de code plante systématiquement VB qui se ferme, et hop, retour
sur
le bureau ! La ligne fautive est le RegQueryValueEx, mais je n'arrive pas à déterminer pourquoi... Jusqu'à cette ligne, tout se passe comme il faut. Les exemples que m'avais indiqués François sur support.microsoft.com m'ont paru plutot confus... Quelqu'un pourrait-il éclairer ma lanterne ?
Merci
Jacques
Jacques
Salut ! Voici la déclaration de la fonction : Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As Long, _ ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) _ As Long (copiée à partir de l'API Guide de AllAPI Network)
Je vais jeter un oeil au lien que tu m'indiques et poursuivre mes recherches sur les API du Registre... Merci de ton aide
A +, Jacques
Salut Jacques! :O)
Comment as-tu déclaré RegQueryValueEx?
Aussi, si tu veux, tu peux jeter un oeil à ma classe CRegistry, tu peux copier la dernière version à partir d'ici : http://groups.google.com/groups?selm=%2333VNZD1CHA.1768%40TK2MSFTNGP12
Les commentaires, comme tu pourras le remarquer sont souvent très à côté de la plaque... (la "magie" du copier/coller)
Salut !
Voici la déclaration de la fonction :
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias
"RegQueryValueExA" (ByVal hkey As Long, _
ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long,
lpData As Any, lpcbData As Long) _
As Long
(copiée à partir de l'API Guide de AllAPI Network)
Je vais jeter un oeil au lien que tu m'indiques et poursuivre mes
recherches sur les API du Registre...
Merci de ton aide
A +,
Jacques
Salut Jacques! :O)
Comment as-tu déclaré RegQueryValueEx?
Aussi, si tu veux, tu peux jeter un oeil à ma classe CRegistry, tu
peux copier la dernière version à partir d'ici :
http://groups.google.com/groups?selm=%2333VNZD1CHA.1768%40TK2MSFTNGP12
Les commentaires, comme tu pourras le remarquer sont souvent très à
côté de la plaque... (la "magie" du copier/coller)
Salut ! Voici la déclaration de la fonction : Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hkey As Long, _ ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) _ As Long (copiée à partir de l'API Guide de AllAPI Network)
Je vais jeter un oeil au lien que tu m'indiques et poursuivre mes recherches sur les API du Registre... Merci de ton aide
A +, Jacques
Salut Jacques! :O)
Comment as-tu déclaré RegQueryValueEx?
Aussi, si tu veux, tu peux jeter un oeil à ma classe CRegistry, tu peux copier la dernière version à partir d'ici : http://groups.google.com/groups?selm=%2333VNZD1CHA.1768%40TK2MSFTNGP12
Les commentaires, comme tu pourras le remarquer sont souvent très à côté de la plaque... (la "magie" du copier/coller)
et ici il faut passé le 4 ième paramètre (lpType) ByVal et non ByRef..
Si ça peut t'être utile, voici du code semblable au tiens qui explique le procédé... (désolé pour les longues lignes..) '*** ' Module1 Option Explicit
Private Declare Function RegCloseKey _ Lib "advapi32.dll" _ ( _ ByVal hKey As Long _ ) As Long
Private Declare Function RegOpenKey _ Lib "advapi32.dll" _ Alias "RegOpenKeyA" _ ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByRef phkResult As Long _ ) As Long
Private Declare Function RegQueryValueEx _ Lib "advapi32.dll" _ Alias "RegQueryValueExA" _ ( _ ByVal hKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ ByRef lpType As Long, _ ByRef lpData As Any, _ ByRef lpcbData As Long _ ) As Long
Private Declare Function FormatMessage _ Lib "kernel32" _ Alias "FormatMessageA" _ ( _ ByVal dwFlags As Long, _ ByRef lpSource As Any, _ ByVal dwMessageId As Long, _ ByVal dwLanguageId As Long, _ ByVal lpBuffer As String, _ ByVal nSize As Long, _ ByRef Arguments As Long _ ) As Long
Private Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200& Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000& Private Const LANG_NEUTRAL As Long = &H0&
' chaîne de type UNICODE se terminant par Chr$(0) Private Const REG_SZ As Long = 1& Private Const HKEY_CURRENT_USER As Long = &H80000001 Private Const ERROR_SUCCESS As Long = 0&
Private Sub Main()
Dim hKey As Long ' Handle de la clé Dim lTypeValeur As Long ' Type de données de la valeur Dim lTailleBuffer As Long ' Taille de la valeur Dim sValeur As String ' Contenu de la valeur
' On ouvre la clé voulue If (RegOpenKey(HKEY_CURRENT_USER, "SoftwareMicrosoftVisual Basic6.0RecentFiles", hKey) = ERROR_SUCCESS) Then ' On récupère les informations concernant la valeur souhaitée If (RegQueryValueEx(hKey, "1", 0, lTypeValeur, ByVal 0, lTailleBuffer) = ERROR_SUCCESS) Then ' On vérifie si le type est un chaîne If (lTypeValeur = REG_SZ) Then ' On créer le buffer avec la taille nécessaire sValeur = String$(lTailleBuffer, Chr$(0)) 'On récupère la donnée en rapellant la fonction If ((RegQueryValueEx(hKey, "1", 0, ByVal 0, ByVal sValeur, lTailleBuffer)) = ERROR_SUCCESS) Then ' On imprime la valeur en éliminant le Chr$(0) à la fin de la chaîne Debug.Print "Voici le dernier projet VB que vous avez ouvert sur votre poste : " & Left$(sValeur, InStr(sValeur, Chr$(0)) - 1) Else Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly, "Erreur...") End If End If Else Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly, "Erreur...") End If Else Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly, "Erreur...") End If
End Sub
' Renvoi le message d'erreur survenu lors de l'appel d'un API ' On doit lui passé la valeur de Err.LastDLLError Private Function GetSystemErrorMessage(ByRef lErrorNumber As Long) As String GetSystemErrorMessage = String$(255, Chr$(0)) Call FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, lErrorNumber, LANG_NEUTRAL, GetSystemErrorMessage, 255, ByVal 0&) GetSystemErrorMessage = Left$(GetSystemErrorMessage, InStr(GetSystemErrorMessage, vbNewLine) - 1) End Function '***
et ici il faut passé le 4 ième paramètre (lpType) ByVal et non ByRef..
Si ça peut t'être utile, voici du code semblable au tiens qui explique le
procédé...
(désolé pour les longues lignes..)
'***
' Module1
Option Explicit
Private Declare Function RegCloseKey _
Lib "advapi32.dll" _
( _
ByVal hKey As Long _
) As Long
Private Declare Function RegOpenKey _
Lib "advapi32.dll" _
Alias "RegOpenKeyA" _
( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByRef phkResult As Long _
) As Long
Private Declare Function RegQueryValueEx _
Lib "advapi32.dll" _
Alias "RegQueryValueExA" _
( _
ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal lpReserved As Long, _
ByRef lpType As Long, _
ByRef lpData As Any, _
ByRef lpcbData As Long _
) As Long
Private Declare Function FormatMessage _
Lib "kernel32" _
Alias "FormatMessageA" _
( _
ByVal dwFlags As Long, _
ByRef lpSource As Any, _
ByVal dwMessageId As Long, _
ByVal dwLanguageId As Long, _
ByVal lpBuffer As String, _
ByVal nSize As Long, _
ByRef Arguments As Long _
) As Long
Private Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200&
Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000&
Private Const LANG_NEUTRAL As Long = &H0&
' chaîne de type UNICODE se terminant par Chr$(0)
Private Const REG_SZ As Long = 1&
Private Const HKEY_CURRENT_USER As Long = &H80000001
Private Const ERROR_SUCCESS As Long = 0&
Private Sub Main()
Dim hKey As Long ' Handle de la clé
Dim lTypeValeur As Long ' Type de données de la valeur
Dim lTailleBuffer As Long ' Taille de la valeur
Dim sValeur As String ' Contenu de la valeur
' On ouvre la clé voulue
If (RegOpenKey(HKEY_CURRENT_USER, "SoftwareMicrosoftVisual
Basic6.0RecentFiles", hKey) = ERROR_SUCCESS) Then
' On récupère les informations concernant la valeur souhaitée
If (RegQueryValueEx(hKey, "1", 0, lTypeValeur, ByVal 0,
lTailleBuffer) = ERROR_SUCCESS) Then
' On vérifie si le type est un chaîne
If (lTypeValeur = REG_SZ) Then
' On créer le buffer avec la taille nécessaire
sValeur = String$(lTailleBuffer, Chr$(0))
'On récupère la donnée en rapellant la fonction
If ((RegQueryValueEx(hKey, "1", 0, ByVal 0, ByVal sValeur,
lTailleBuffer)) = ERROR_SUCCESS) Then
' On imprime la valeur en éliminant le Chr$(0) à la fin
de la chaîne
Debug.Print "Voici le dernier projet VB que vous avez
ouvert sur votre poste : " & Left$(sValeur, InStr(sValeur, Chr$(0)) - 1)
Else
Call MsgBox(GetSystemErrorMessage(Err.LastDllError),
vbOKOnly, "Erreur...")
End If
End If
Else
Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly,
"Erreur...")
End If
Else
Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly,
"Erreur...")
End If
End Sub
' Renvoi le message d'erreur survenu lors de l'appel d'un API
' On doit lui passé la valeur de Err.LastDLLError
Private Function GetSystemErrorMessage(ByRef lErrorNumber As Long) As String
GetSystemErrorMessage = String$(255, Chr$(0))
Call FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, lErrorNumber,
LANG_NEUTRAL, GetSystemErrorMessage, 255, ByVal 0&)
GetSystemErrorMessage = Left$(GetSystemErrorMessage,
InStr(GetSystemErrorMessage, vbNewLine) - 1)
End Function
'***
et ici il faut passé le 4 ième paramètre (lpType) ByVal et non ByRef..
Si ça peut t'être utile, voici du code semblable au tiens qui explique le procédé... (désolé pour les longues lignes..) '*** ' Module1 Option Explicit
Private Declare Function RegCloseKey _ Lib "advapi32.dll" _ ( _ ByVal hKey As Long _ ) As Long
Private Declare Function RegOpenKey _ Lib "advapi32.dll" _ Alias "RegOpenKeyA" _ ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ ByRef phkResult As Long _ ) As Long
Private Declare Function RegQueryValueEx _ Lib "advapi32.dll" _ Alias "RegQueryValueExA" _ ( _ ByVal hKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ ByRef lpType As Long, _ ByRef lpData As Any, _ ByRef lpcbData As Long _ ) As Long
Private Declare Function FormatMessage _ Lib "kernel32" _ Alias "FormatMessageA" _ ( _ ByVal dwFlags As Long, _ ByRef lpSource As Any, _ ByVal dwMessageId As Long, _ ByVal dwLanguageId As Long, _ ByVal lpBuffer As String, _ ByVal nSize As Long, _ ByRef Arguments As Long _ ) As Long
Private Const FORMAT_MESSAGE_IGNORE_INSERTS As Long = &H200& Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000& Private Const LANG_NEUTRAL As Long = &H0&
' chaîne de type UNICODE se terminant par Chr$(0) Private Const REG_SZ As Long = 1& Private Const HKEY_CURRENT_USER As Long = &H80000001 Private Const ERROR_SUCCESS As Long = 0&
Private Sub Main()
Dim hKey As Long ' Handle de la clé Dim lTypeValeur As Long ' Type de données de la valeur Dim lTailleBuffer As Long ' Taille de la valeur Dim sValeur As String ' Contenu de la valeur
' On ouvre la clé voulue If (RegOpenKey(HKEY_CURRENT_USER, "SoftwareMicrosoftVisual Basic6.0RecentFiles", hKey) = ERROR_SUCCESS) Then ' On récupère les informations concernant la valeur souhaitée If (RegQueryValueEx(hKey, "1", 0, lTypeValeur, ByVal 0, lTailleBuffer) = ERROR_SUCCESS) Then ' On vérifie si le type est un chaîne If (lTypeValeur = REG_SZ) Then ' On créer le buffer avec la taille nécessaire sValeur = String$(lTailleBuffer, Chr$(0)) 'On récupère la donnée en rapellant la fonction If ((RegQueryValueEx(hKey, "1", 0, ByVal 0, ByVal sValeur, lTailleBuffer)) = ERROR_SUCCESS) Then ' On imprime la valeur en éliminant le Chr$(0) à la fin de la chaîne Debug.Print "Voici le dernier projet VB que vous avez ouvert sur votre poste : " & Left$(sValeur, InStr(sValeur, Chr$(0)) - 1) Else Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly, "Erreur...") End If End If Else Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly, "Erreur...") End If Else Call MsgBox(GetSystemErrorMessage(Err.LastDllError), vbOKOnly, "Erreur...") End If
End Sub
' Renvoi le message d'erreur survenu lors de l'appel d'un API ' On doit lui passé la valeur de Err.LastDLLError Private Function GetSystemErrorMessage(ByRef lErrorNumber As Long) As String GetSystemErrorMessage = String$(255, Chr$(0)) Call FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, lErrorNumber, LANG_NEUTRAL, GetSystemErrorMessage, 255, ByVal 0&) GetSystemErrorMessage = Left$(GetSystemErrorMessage, InStr(GetSystemErrorMessage, vbNewLine) - 1) End Function '***
> "si tu modifies" & " mon code " & "est-ce que ça fonctionne?"
bon!
Jacques
Salut ! J'ai isolé le problème mais je n'arrive pas pour autant à le résoudre.
MySubKey = "00" & CStr(i) & vbNullChar ' ici i = 2 Reponse = RegOpenKeyEx(Resp, MySubKey, 0, KEY_QUERY_VALUE, Rep) If Reponse = ERROR_SUCCESS Then MySubKey = "Name" & vbNullChar If RegQueryValueEx(ByVal Rep, ByVal MySubKey, 0, ByVal 0&, ByVal 0&, lngData) = 0 Then strNameFound = Space$(lngData) RegQueryValueEx ByVal Rep, ByVal MySubKey, 0, ByVal 0&, ByVal strNameFound, lngData End If Else MsgBox "Erreur lors de l'accès au Registre !", vbCritical + vbOKOnly, "Erreur" End If
Le premier RegQueryValueEx fonctionne sans problème. C'est le second qui plante, et plus particulièrement le "Byval strNameFound". J'ai vérifié le lngData qui a la bonne valeur pourtant. strNameFound contient, juste avant le second appel 12 espaces (ce qui est correct : longueur des données + caractère null) Si je change ce paramètre, en omettant le Byval, ca plante plus mais m'affiche un message d'erreur "Appel de fonction incorrect.". Je commence à m'arracher les cheveux... Merci pour ton aide précieuse. A bientôt
> "si tu modifies" & " mon code " & "est-ce que ça fonctionne?"
bon!
Salut !
J'ai isolé le problème mais je n'arrive pas pour autant à le résoudre.
MySubKey = "00" & CStr(i) & vbNullChar ' ici i = 2
Reponse = RegOpenKeyEx(Resp, MySubKey, 0, KEY_QUERY_VALUE, Rep)
If Reponse = ERROR_SUCCESS Then
MySubKey = "Name" & vbNullChar
If RegQueryValueEx(ByVal Rep, ByVal MySubKey, 0, ByVal 0&, ByVal 0&,
lngData) = 0 Then
strNameFound = Space$(lngData)
RegQueryValueEx ByVal Rep, ByVal MySubKey, 0, ByVal 0&, ByVal
strNameFound, lngData
End If
Else
MsgBox "Erreur lors de l'accès au Registre !", vbCritical +
vbOKOnly, "Erreur"
End If
Le premier RegQueryValueEx fonctionne sans problème. C'est le second qui
plante, et plus particulièrement le "Byval strNameFound".
J'ai vérifié le lngData qui a la bonne valeur pourtant. strNameFound
contient, juste avant le second appel 12 espaces (ce qui est correct :
longueur des données + caractère null)
Si je change ce paramètre, en omettant le Byval, ca plante plus mais
m'affiche un message d'erreur "Appel de fonction incorrect.".
Je commence à m'arracher les cheveux...
Merci pour ton aide précieuse.
A bientôt
Salut ! J'ai isolé le problème mais je n'arrive pas pour autant à le résoudre.
MySubKey = "00" & CStr(i) & vbNullChar ' ici i = 2 Reponse = RegOpenKeyEx(Resp, MySubKey, 0, KEY_QUERY_VALUE, Rep) If Reponse = ERROR_SUCCESS Then MySubKey = "Name" & vbNullChar If RegQueryValueEx(ByVal Rep, ByVal MySubKey, 0, ByVal 0&, ByVal 0&, lngData) = 0 Then strNameFound = Space$(lngData) RegQueryValueEx ByVal Rep, ByVal MySubKey, 0, ByVal 0&, ByVal strNameFound, lngData End If Else MsgBox "Erreur lors de l'accès au Registre !", vbCritical + vbOKOnly, "Erreur" End If
Le premier RegQueryValueEx fonctionne sans problème. C'est le second qui plante, et plus particulièrement le "Byval strNameFound". J'ai vérifié le lngData qui a la bonne valeur pourtant. strNameFound contient, juste avant le second appel 12 espaces (ce qui est correct : longueur des données + caractère null) Si je change ce paramètre, en omettant le Byval, ca plante plus mais m'affiche un message d'erreur "Appel de fonction incorrect.". Je commence à m'arracher les cheveux... Merci pour ton aide précieuse. A bientôt