如何在另一台电脑中使用依赖于Excel中的gsl dll的c++dll



我在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的依赖项无法解析。任一:

  1. GSL库不能位于目标计算机上,或者
  2. 在目标计算机上找不到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"作为用户文件夹。

相关内容

最新更新