我在c++
中创建了一个dll
。我的dll
利用了gsl dll
的一些方法。
我在Excel中调用dll
,在我的电脑上运行良好,但如果我试图在另一台电脑中从Excel调用dll
,则返回错误:
"File not found".
所有文件都在正确的路径中。
可能是什么问题??
更多信息:
我以以下方式在Excel中声明函数:
Declare Function MY_DLL_P Lib "C:UsersBaisoDesktopMY_DLL.dll" (ByVal file As String, ByRef results As Double) As Integer
这是Excel函数的一部分:
sol = MY_DLL_P(objDom.XML, results(0))
Debug.Print CStr(results(0))
Debug.Print CStr(results(1))
Debug.Print CStr(results(2))
Debug.Print CStr(sol)
Dll的路径正确。
在我的c++项目中,这是头文件my_DLL.h:
static __declspec(dllexport) int _stdcall MY_DLL_P(char* file, double* result);
这是MY_DLL.cpp文件:
#include "MY_DLL.h"
#include "gslgsl_linalg.h"
#include "gslgsl_poly.h"
int MY_DLL_P(char* file, double* result)
{
...
}
这是文件.def
LIBRARY "MY_DLL"
EXPORTS
MY_DLL_P
最有可能的解释是DLL的依赖项无法解析。任一:
- GSL库不能位于目标计算机上,或者
- 在目标计算机上找不到MSVC运行时
模块加载程序将尝试使用动态链接库搜索顺序解析GSL库。您需要确保可以通过这种方式找到GSL库。
至于MSVC运行时,您需要确保它在目标计算机上可用。通常,您可以通过在目标计算机上安装MSVC运行时可再分发包来实现这一点。
您可以使用像Dependency Walker这样的工具来帮助诊断此类问题。
另一种可能性是错误来自您实现的函数MY_DLL_P
。也许找不到的文件就是您在其第一个参数中传递给MY_DLL_P
的文件。
不能这样声明函数:
Declare Function MY_DLL_P Lib "C:UsersBaisoDesktopMY_DLL.dll" (ByVal file As String, ByRef results As Double) As Integer
并期望它能在任何人的电脑上工作,但你的电脑除外。您已明确调用"Baiso"作为用户文件夹。