Vba 在Win7上运行Visual Basic 6时读取注册表时出错

Vba 在Win7上运行Visual Basic 6时读取注册表时出错,vba,windows-7,registry,Vba,Windows 7,Registry,我从一位家庭成员的朋友那里继承了一个VB6应用程序,他想对其进行一些增强。 我已经三年多没有用VB开发了(我目前正在用MS Dynamics Ax开发)。 我最近升级了硬件,现在正在运行Win7。我上一次使用该应用程序(大约一年半前)是在WinXP平台上,一切正常。现在,当我在Win7上运行应用程序(通过代码)时,我在尝试从注册表读取时出错。 是的,我作为管理员运行VB 从注册表读取的代码是: 公共职能部门注册(ByVal hKeyRoot,如有必要_ ByVal sSubKey作为字符串_ B

我从一位家庭成员的朋友那里继承了一个VB6应用程序,他想对其进行一些增强。 我已经三年多没有用VB开发了(我目前正在用MS Dynamics Ax开发)。
我最近升级了硬件,现在正在运行Win7。我上一次使用该应用程序(大约一年半前)是在WinXP平台上,一切正常。现在,当我在Win7上运行应用程序(通过代码)时,我在尝试从注册表读取时出错。 是的,我作为管理员运行VB

从注册表读取的代码是: 公共职能部门注册(ByVal hKeyRoot,如有必要_ ByVal sSubKey作为字符串_ ByVal sValueName(作为字符串)作为字符串

Dim r As Long
Dim sData As String * 255
Dim lDataSize As Long
Dim sTempVal As String
Dim readValue As String

lDataSize = 255

'Get the Value Requested
lDataSize = 255
r = VRegReadString(hKeyRoot, sSubKey, sValueName, sData, lDataSize)
If r Then
    sTempVal = ""
Else
    sTempVal = Left$(sData, lDataSize - 1)
End If

sReadRegistry = sTempVal
端函数

“VRegReadString”在模块中声明;声明如下:

Declare Function VRegReadString Lib "VREG" (ByVal hKeyRoot As Long, ByVal sSubKey As String, ByVal sValueName As String, ByVal sData As String, ByRef lDataSize As Long) As Long
它抱怨“VREG”图书馆… 我得到的错误是:“未找到文件:VREG”

是否有我忘记选择的引用或组件?是否有人可以帮助解决此问题


提前感谢。

看到函数声明是从名为“VREG”的外部库导入的,您可能缺少实际库本身,即VREG.DLL。不幸的是,这似乎不是一个公共库,因此您必须自己提出它

不过,好消息是,访问注册表并不困难,只需使用简单的Windows API即可完成,尤其是看到VREG.DLL似乎并没有真正为常规API添加大量抽象。请看一下这些函数:


…如果您无法从某个地方获得所需的DLL,您可以使用它轻松地重新写入注册表访问。

A哈哈,我确实在某个地方拥有该DLL(但不是在这台新机器上)。让搜索开始…谢谢Jim!哦,另一件事:如何在Win7中注册DLL?注册文件的运行方式是什么?您只需要注册暴露COM对象的DLL。这是一个常规DLL,只需导出函数,无需注册。只需将其放在应用程序可以找到的路径中即可。请参阅: