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

时间:2011-12-22 16:21:04

标签: c++ winapi vba dll

我正在使用C ++创建一个可以从VBA代码中使用的简单DLL。但是,虽然它可以在我的开发计算机上运行,​​但在尝试访问不同计算机上的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很新,我是否编写了错误的代码,或者是VBA的问题?

使用RegSvr32还会产生“模块[dllpath]无法加载。确保二进制文件存储在指定的路径中或调试它以检查二进制文件或从属.DLL文件的问题。”

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

要获取有关您的dll所需的其他依赖项的信息,您可以尝试使用Dependency Walker免费软件。

答案 2 :(得分:0)

我只花了几天时间追踪并解决了这个问题。

就我而言,问题是我的DLL与多线程运行时库DLL动态链接。

修复方法是在VS中加载我的项目,编辑项目的属性,然后在"配置属性> C / C ++>代码生成"改变"运行时库"来自"多线程DLL(/ MD)"到"多线程(/ MT)"。

无论如何,问题已经解决了。希望这有助于其他人。