请问
Private Const HKEY_LOCAL_MACHINE = &H80000002
Dim  zKey  As  Long
zKey  =  HKEY_LOCAL_MACHINE             
RegOpenKeyEx  zKey,  lpszSubKey,  0,  1,  phkResult 中的 &H80000002 的16进制数转换成 long 型变为负数了应该时超值,那api RegOpenKeyEx  定义中参数为long 型,我该怎么办???ByVal hKey As Long是long 型。Private Declare Function RegOpenKeyEx Lib "advapi32.dll"Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey AsString, ByVal ulOptions As Long, ByVal samDesired As Long,
phkresult As Long) As Long

解决方案 »

  1.   

    不用办,不要把常数再赋值给变量了吧?既然Private Const HKEY_LOCAL_MACHINE = &H80000002
    了,就是定义了变量HKEY_LOCAL_MACHINE(只是名字看着象注册表的主键,方便写代码而已,他不还是变量吗,什么名字有什么关系呢),并且数值等于&H80000002,为什么你还要
    Dim  zKey  As  Long
    zKey  =  HKEY_LOCAL_MACHINE
    。。费解中。
    直接
    RegOpenKeyEx  HKEY_LOCAL_MACHINE,  lpszSubKey,  0,  1,  phkResult 
    就可以了啊,,,为什么为什么为什么啊。。
    API浏览器里面的常量定义,一般都是按名字意思来定义的变量名,就象你定义lpszSubKey一样,不是什么什么什么子键的意思吗。。当然了,你可以这样去定义,
    Private Const zKey = &H80000002
    又有什么关系呢,那就用
    RegOpenKeyEx  zKey ,  lpszSubKey,  0,  1,  phkResult 

    看来楼主是对“常量定义”这个问题理解不是很清楚