¿Por qué esto me da error 'la convención de llamadas a dll es incorrecta?
Código:
En un móduloCommand1_click() Resultado% = RegBorrarClave("MACHINE", "SAM\Miclave", 32) end sub
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:
He comprobado en el depurador que llega a la línea que he marcado con /* ERROR * con los valores: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
Clave = HKEY_LOCAL_MACHINE
SubClave = "SAM\MiClave"
que son correctos
![Pensando](http://static.forosdelweb.com/fdwtheme/images/smilies/scratchchin.gif)