VBA代码无法访问System32中的DLL

我的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(未find)。

Windows XP和Word 2003没有问题。

谁能帮忙?

Solutions Collecting From Web of "VBA代码无法访问System32中的DLL"

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

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

看起来像UAC是问题。 尝试以管理员身份运行VBA脚本。 它可以帮助你。

最近的开发人员提出了下面的修复方案,允许在64位机器上注册32位.dll文件

1)打开一个DOS命令窗口。

2)导航到C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727

3)输入以下内容并按回车。 regasm / codebase“C:\ Users \ myname \ Documents \ mydll.dll”

昨天我也有同样的问题。 该程序运行在我的机器上,但不在其他人。 事实上,Excel的信息是错误的。 他明显地发现DLL文件,但这个DLL调用orher DLL,缺少在系统中: MSVCR100D.dllNTDLL.dll. 我发现通过使用Dependency Walker自由软件,能够检查哪个dll是由dll调用的。