我的 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上没有问题。
有人可以帮忙吗?
这是一个 32 位 DLL 和一个在 64 位 Windows 上的 WOW64 模拟器中运行的 32 位进程。文件重定向正在发挥作用,因此当 32 位进程查看时system32
它实际上被重定向到32位系统目录SysWOW64
.
简单快捷的解决方案是将 DLL 移至C:\Windows\SysWOW64
。然而,正如 Cody Gray 在评论中指出的那样,不建议您将应用程序 DLL 放置在系统目录中。通常的做法是将 DLL 放置在程序文件目录中的应用程序文件夹中,并确保需要加载 DLL 时该文件夹位于 DLL 搜索路径中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)