2011-12-22 49 views
1

我正在使用C++创建一个简单的DLL,我可以使用VBA代码。但是,虽然它在我的开发计算机上工作,但试图访问不同计算机上的DLL时,VBA声明DLL文件未找到,尽管硬编码路径。尽管硬编码位置,VBA仍无法找到我的DLL。

我的DLL看起来像这样(使用Visual C++ 2010为表达一个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还会产生“模块[dllpath]加载失败,请确保二进制文件存储在指定路径或调试它以检查二进制或相关.DLL文件的问题。

+2

Project + Properties,C/C++,代码生成。将运行时库更改为/ MT。这可以避免在忘记在目标机器上安装CRT或使用Debug版本而不是Release版本时的麻烦。 –

回答

5

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

1

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

0

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

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

解决方法是在VS中加载我的项目,编辑项目的属性,然后在“配置属性> C/C++>代码生成”下将“多线程DLL(/ MD)”更改为“多线程(/ MT)“。

无论如何,问题解决了。希望这可以帮助别人。

相关问题