sfs*_*fsn 4 windows vba windows-7
我的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
Run Code Online (Sandbox Code Playgroud)
我将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
Run Code Online (Sandbox Code Playgroud)
然后我将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和一个32位进程在64位Windows上的WOW64仿真器中运行.文件重定向正在进行中,因此当32位进程查找时,system32
它实际上被重定向到32位系统目录SysWOW64
.
简单快速的解决方案是将DLL移动到C:\Windows\SysWOW64
.但是,正如Cody Gray在评论中指出的那样,不建议您将应用程序DLL放在系统目录中.通常的做法是将DLL放在程序文件目录中的应用程序文件夹中,并确保在需要加载DLL时该文件夹位于DLL搜索路径中.