VBA代码无法访问System32中的DLL

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上没有问题.

有人可以帮忙吗?

Dav*_*nan 7

这是一个32位DLL和一个32位进程在64位Windows上的WOW64仿真器中运行.文件重定向正在进行中,因此当32位进程查找时,system32它实际上被重定向到32位系统目录SysWOW64.

简单快速的解决方案是将DLL移动到C:\Windows\SysWOW64.但是,正如Cody Gray在评论中指出的那样,不建议您将应用程序DLL放在系统目录中.通常的做法是将DLL放在程序文件目录中的应用程序文件夹中,并确保在需要加载DLL时该文件夹位于DLL搜索路径中.

  • 嗯,你打败我来回答这个问题.但我非常不同意将DLL放在Windows系统目录中的建议.你根本不应该搞乱那些目录. (2认同)