我在dll
中创建了c++
。我的dll
利用了gsl dll
的一些方法。
我在Excel中调用我的dll
并在我的电脑上调用它,但如果我尝试从另一台电脑中调用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)
{
...
}
这是file.def
LIBRARY "MY_DLL"
EXPORTS
MY_DLL_P
答案 0 :(得分:3)
最可能的解释是DLL的依赖关系无法解决。之一:
模块加载器将尝试使用Dynamic-Link Library Search Order解析GSL库。您需要确保可以通过这种方式找到GSL库。
对于MSVC运行时,您需要确保目标计算机上可用。通常,您可以通过在目标计算机上安装MSVC运行时可再发行组件包来执行此操作。
您可以使用Dependency Walker之类的工具来帮助您诊断这类问题。
另一种可能性是错误来自您实施的功能MY_DLL_P
。也许无法找到的文件是您在其第一个参数中传递给MY_DLL_P
的文件。
答案 1 :(得分:1)
你不能声明这样的函数:
Declare Function MY_DLL_P Lib "C:\Users\Baiso\Desktop\MY_DLL.dll" (ByVal file As String, ByRef results As Double) As Integer
并期望它可以在任何人的PC上工作,但是你的。你已经明确地喊出了Baiso'作为用户文件夹。