在matlab中使用dll

时间:2010-02-17 12:59:08

标签: matlab dll shared-libraries fortran loadlibrary

我在matlab中使用dll fortran时遇到问题。 我无法在matlab中使用由fortran构建的dll。我在matlab中使用“loadlibrary”指令,但错误与头文件有关。 什么是头文件? 请给我更多信息,在matlab中加载一个dll fortran并调用它。

3 个答案:

答案 0 :(得分:4)

我建议您使用Matlab的MEX功能重新构建它,而不是尝试直接使用dll文件。是的,一个mex文件是一个dll,你可以在Matlab之外构建dll并成功使用它们,对于像我猜你这样的初学者来说,使用MEX要容易得多。更简单的一种方法是,如果你构建一个mex文件,系统不会要求你提供一个头文件,正如你所知,这是一个对Fortran程序员来说相当陌生的概念。 MEX使您的生活更轻松的另一种方式是,您可以直接从Matlab的命令行调用dll公开的函数,而无需loadlibrary。

研究有关MEX文件的Matlab文档,特别注意如何以这种方式集成Fortran。

答案 1 :(得分:1)

如果没有看到您在MATLAB中使用的头文件和命令行,这里很难帮助您。您可以reference the documentation in MATLAB which request that you pass two arguments to loadlibrary,第二个是带有功能签名的头文件。我猜你没有提供第二个论点。

答案 2 :(得分:1)

您需要提供一个头文件,用于定义您将要调用的Fortran DLL中的每个命名函数。例如,如果您的DLL包含一个名为sum的函数,它将两个双精度变量相加,例如:

function sum(a,b) result(sum)
  real(kind=2), intent(in) :: a, b
  real(kind=2) :: sum
  sum = a + b
end function

然后你的标题需要包含以下内容:

double sum(double*a, double*b);

但是不要忘记使用特定于Fortran编译器的名称修饰来装饰它。例如,如果sum位于名为foo的模块中,并且您使用gfortran进行编译,那么您将需要以下内容:

double __foo_MOD_sum(double*a, double*b);

还有很多其他案例,但这就是它的要点。