Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

RegEnumKeyEx retourne 87

11 réponses
Avatar
neirda
Bonjour =E0 tous,

la fonction RegEnumKeyEx me retourne toujours l'erreur 87(param=E8tres
incorrect), je n'ai pas du tout saisir :p

Public Const HKEY_CLASSES_ROOT =3D &H80000000
Public Const REG_SZ =3D 1
Public Const REG_DWORD =3D 4
Public Const READ_CONTROL =3D &H20000
Public Const KEY_READ =3D &H20019

Public 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

Public Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As
Long) As Long

Public Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias
"RegEnumKeyExA" (ByVal hKey As Long, _
ByVal dwIndex As
Long, ByVal lpName As String, _
lpcbName As Long,
lpReserved As Long, _
ByVal lpClass As
String, lpcbClass As Long, _
lpftLastWriteTime
As Any) As Long

Public Sub Lister()
Dim hand As Long
Dim nom As String
Dim time As Variant
Dim tailleNom As Long
Dim unusedA As Long
Dim unusedB As Long
Dim ind As Long

MsgBox RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", 0, READ_CONTROL,
hand)
MsgBox RegEnumKeyEx(hand, 0, nom, tailleNom, unusedA,
vbNullString, unusedB, time)
MsgBox nom & " =3D> " & tailleNom
MsgBox RegCloseKey(hand)
End Sub

1 réponse

1 2
Avatar
François Picalausa
On 4月16日, 午後4:38, "neirda" ail.com> wrote:
Dim hKey, lNameSize, lDataSize As Long
    Dim sName, sData, SPATH As String
    Dim iCpt, iErr As Integer




EN RAJOUTANT SPATH DANS LA DECLARATION, et même sans l'utiliser par la
suite, la fonction RegEnumValue me retourne une suite de vbnullchar...

Je ne comprends pas pourquoi...



Hello,

Contrairement à C, C++, java, C#, ... qui permettent le même type pour
de multiples déclarations, en VB
Dim sName, sData, SPATH As String
ne signifie pas que les types précédents SPATH sont des chaines de
caractère.
Il s'agit en réalité de Variants (le type le plus permissif de VB ), ce
qui n'est probablement pas attendu par les APIs.

La déclaration correcte est:
Dim sName As String, sData As String, SPATH As String

Pour s'en convaincre:
Dim v, s As String
Debug.Print TypeName(v) 'Empty (état particulier d'un variant)
Debug.Print TypeName(s) 'String


Cela étant, fais attention que la longueur limite sur les noms de cl é
est différente de la limite sur les noms de valeurs.
http://msdn2.microsoft.com/en-us/library/ms724872.aspx

Aussi, pour manipuler le registre, jette un oeil à ce post:
http://groups.google.com/group/microsoft.public.fr.vb/msg/5d1c5050c10a3740
La classe CRegistry proposée est entièrement réutilisable, et
probablement adaptée à ce que tu souhaites réaliser.

François Picalausa
1 2