如何在另一台PC上使用依赖于Excel中的gsl dll的c ++ dll?

时间:2014-10-24 09:28:33

标签: c++ excel gsl

我在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

2 个答案:

答案 0 :(得分:3)

最可能的解释是DLL的依赖关系无法解决。之一:

  1. GSL库不能位于目标计算机上,或
  2. 无法在目标计算机上找到MSVC运行时。
  3. 模块加载器将尝试使用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'作为用户文件夹。