我在 c++
中创建了一个 dll
。我的 dll
利用了 gsl dll
的一些方法。
我在 Excel 中调用我的 dll
,在我的电脑上它运行良好,但如果我尝试从另一台电脑的 Excel 调用 dll
返回错误:
"File not found".
所有文件都在正确的路径中。
可能是什么问题??
更多信息:
我在 Excel 中按以下方式声明函数:
Declare Function MY_DLL_P Lib "C:\Users\Baiso\Desktop\MY_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 "gsl\gsl_linalg.h"
#include "gsl\gsl_poly.h"
int MY_DLL_P(char* file, double* result)
{
...
}
这是文件.def
LIBRARY "MY_DLL"
EXPORTS
MY_DLL_P
最佳答案
最可能的解释是您的 DLL 的依赖项未能解析。要么:
- GSL 库不能位于目标机器上,或者
- 无法在目标机器上找到 MSVC 运行时。
模块加载器将尝试使用 Dynamic-Link Library Search Order 解析 GSL 库.您需要确保可以通过这种方式找到 GSL 库。
至于 MSVC 运行时,您需要确保它在目标机器上可用。通常,您可以通过在目标计算机上安装 MSVC 运行时可再发行组件包来实现这一点。
您可以使用 Dependency Walker 等工具来帮助您诊断此类问题。
另一种可能性是错误来自您实现的函数 MY_DLL_P
。也许无法找到的文件是您在其第一个参数中传递给 MY_DLL_P
的文件。
关于c++ - 如何在另一台电脑的 Excel 中使用依赖于 gsl dll 的 c++ dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26545195/