我的VBA代码无法访问Windows 7 64位和Word 2010 32位上的C:\ Windows \ System32文件夹中的DLL。
Private Declare Function my_func Lib "mydll.dll" (ByVal param As String) As Long
Public Sub MyFuncTest
n = my_func("a")
End
我将mydll.dll复制到C:\ Windows \ System32并调用MyFuncTest但收到错误消息,如“错误53:找不到'mydll.dll'”。
但是,我将代码中的声明更改为:
Private Declare Function my_func Lib "C:\Users\myname\Documents\mydll.dll" (ByVal param As String) As Long
然后我将mydll.dll复制到C:\ Users \ myname \ Documents,我的帐户的Documents文件夹,并成功执行了MyFuncTest。
声明中将“mydll.dll”更改为“C:\ Windows \ System32 \ mydll.dll”无效。我尝试在同一个VBA环境中使用FileSystemObject#FileExists方法访问C:\ Windows \ System32 \ mydll.dll,但它返回False(未找到)。
Windows XP和Word 2003没有问题。
有人可以帮忙吗?
答案 0 :(得分:7)
这是一个32位DLL和一个32位进程,在64位Windows上的WOW64仿真器中运行。 File redirection正在运行,因此当system32
中的32位进程查找时,它实际上会重定向到32位系统目录SysWOW64
。
简单快捷的解决方案是将DLL移至C:\Windows\SysWOW64
。但是,正如Cody Gray在评论中指出的那样,不建议您将应用程序DLL放在系统目录中。通常的做法是将DLL放在程序文件目录中的应用程序文件夹中,并确保在需要加载DLL时该文件夹位于DLL搜索路径中。
答案 1 :(得分:0)
答案 2 :(得分:0)
最近的开发人员提出了以下修复方案,允许在64位计算机上注册32位.dll
1)打开DOS命令窗口。
2)导航到C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727
3)输入以下内容并按Enter键。 regasm / codebase“C:\ Users \ myname \ Documents \ mydll.dll”
答案 3 :(得分:0)
昨天我遇到了完全相同的问题。程序在我的机器上运行,但在其他机器上运行。
实际上,Excel中的消息是错误的。他显然找到了lll dll文件,但是这个dll正在调用orher dll,在系统中丢失:MSVCR100D.dll
和NTDLL.dll.
我发现通过使用Dependency Walker免费软件,能够检查dll调用哪个dll。