VBA找不到我的DLL,尽管硬编码的位置

VBA cannot find my DLL, despite hardcoding location.

本文关键字:编码 位置 找不到 我的 DLL VBA      更新时间:2023-10-16

我正在使用c++创建一个简单的DLL,我可以从VBA代码中使用。然而,当它在我的开发计算机上工作时,当试图访问不同计算机上的DLL时,VBA声明DLL文件未找到,尽管硬编码路径。

我的DLL看起来像这样(用Visual c++ 2010 Express创建的Win32 DLL项目):

DEF文件:

LIBRARY "squareNumber"
EXPORTS
squareNumber

Function.cpp:

double __stdcall squareNumber(double & x)
{
    return x*x;
}

VBA代码看起来像这样:

Public Declare Function squareNumber Lib "C:MySimpleDLL.dll" (ByRef number As Double) As Double
Sub test()
    MsgBox squareNumber(2)
End Sub

我是非常新的c++ dll,我的代码dll错误,还是它是VBA的问题?

使用RegSvr32也会产生"The module [dllpath] failed to load. "确保二进制文件存储在指定的路径中,或者对其进行调试以检查二进制文件或依赖的. dll文件是否存在问题。"

听起来您的DLL依赖于存在于您的开发机器上但不存在于目标机器上的其他DLL。当操作系统加载你的DLL,但无法找到相关的DLL,它报告相同的"无法找到文件"错误,让你认为它找不到你的DLL,当它真的找到了。如果是这种情况,那么您需要分发这些额外的dll,或者删除对它们的依赖。

为了获得有关您的dll所需的其他依赖项的信息,您可以尝试Dependency Walker免费软件。

我花了好几天的时间来追踪和解决这个问题。

在我的情况下,问题是我的DLL与多线程运行时库DLL动态链接。

修复是在VS中加载我的项目,编辑项目的属性,并在"配置属性>C/c++>代码生成"下将"运行时库"从"多线程DLL (/MD)"更改为"多线程(/MT)"。

至少对我来说问题解决了。