Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/01/2004, 08:58
Gedeon
 
Fecha de Ingreso: agosto-2003
Mensajes: 174
Antigüedad: 20 años, 9 meses
Puntos: 3
Borrar clave del registro en vb

Hola
¿Por qué esto me da error 'la convención de llamadas a dll es incorrecta?

Código:
Command1_click()
Resultado% = RegBorrarClave("MACHINE", "SAM\Miclave", 32)
end sub
En un módulo
Código:
Global Const HKEY_CLASSES_ROOT = &H80000000
Global Const HKEY_CURRENT_USER = &H80000001
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const HKEY_USERS = &H80000003
Global Const HKEY_CURRENT_CONFIG = &H80000005
Global Const HKEY_DYN_DATA = &H80000006
Global Const HKEY_PERFORMANCE_DATA = &H80000004

Global Const KEY_WOW64_64KEY  As Long = &O100   '// 64-bit Key
Global Const KEY_WOW64_32KEY As Long = &O200 '// 32-bit Key
Declare Function RegDeleteKeyEx Lib "advapi32.dll" Alias _
       "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _
       ByVal samDesired As Long, ByVal Reserved As Long) As Long
Código:
Function RegBorrarClave(ClaveStr As String, SubClave As String, Tipo As String)
Dim Resultado As long, Handle As String, Clave As Long
Clave = ObtenerClave(ClaveStr)
If Tipo = 32 Then
    Resultado = RegDeleteKeyEx(Clave, SubClave, KEY_WOW64_32KEY, 0) /* ERROR *
ElseIf Tipo = 64 Then
    Resultado = RegDeleteKeyEx(Clave, SubClave, KEY_WOW64_64KEY, 0)
Else
    Resultado = -1
End If
RegBorrarClave = Resultado
End Function
Código:
Function ObtenerClave(str As String)
Select Case str
    Case "MACHINE"
        Clave = HKEY_LOCAL_MACHINE
    Case "ROOT"
        Clave = HKEY_LOCAL_ROOT
    Case "USER"
        Clave = HKEY_CURRENT_USER
    Case "CONFIG"
        Clave = HKEY_CURRENT_CONFIG
    Case "USERS"
        Clave = HKEY_USERS
    Case "DATA"
        Clave = HKEY_PERFOMANCE_DATA
    Case "TEXT"
        Clave = HKEY_PERFOMANCE_TEXT
    Case "NSLTEXT"
        Clave = HKEY_PERFOMANCE_NLSTEXT
    Case Else
        Clave = -1
End Select
ObtenerClave = Clave
End Function
He comprobado en el depurador que llega a la línea que he marcado con /* ERROR * con los valores:
Clave = HKEY_LOCAL_MACHINE
SubClave = "SAM\MiClave"
que son correctos


Última edición por Gedeon; 13/01/2004 a las 09:10