一个MEX文件可控制所有功能,并在DLL中对其进行绑定

时间:2019-05-03 17:25:08

标签: visual-studio matlab fortran mex intel-fortran

我正在使用Intel Fortran编译要在MATLAB中使用的MEX文件。 (MEX文件是dll的公开代码,在本例中为MATLAB的fortran函数。)我要向MATLAB公开的每个Fortran函数均与一个MEX文件关联。最初,我是在命令行中执行此操作的,并希望移至Visual Studio。一个功能is here的Visual Studio示例。

由于我有很多函数,所以我不想为每个函数创建一个Visual Studio项目,并且我希望有一个DLL MEX文件,其中包含我想导出到MATLAB的所有Fortran函数。可以做到吗?如果可以,怎么办?

1 个答案:

答案 0 :(得分:2)

在MATLAB中,每个MEX文件都实现一个MATLAB函数。但是,您可以编写MEX文件函数,使其接受第一个参数作为字符串,该字符串指示您要调用的Fortran函数。例如,您将有一个命令:

out = my_mex_gate('function1', arg1, arg2);

如果您不喜欢这种语法(我不会感到惊讶),则将此MEX文件放在一个名为private的子目录中,这样就无法从目录外部访问它,并写M调用您的私有MEX文件的文件功能:

function out = function1(arg1,arg2)
   out = my_mex_gate('function1',arg1,arg2);

您仍然需要为要公开的每个功能编写一个M文件。但是,由于这些M文件还应包含每个函数的文档,因此这些文件除了简化语法外还很有用。

您的目录结构如下:

  Ftoolbox/
     +- function1.m
     +- function2.m
     +- function3.m
     +- private/
           +- my_mex_gate.mex

选择一个有意义的名称,而不要选择Ftoolbox。然后,将此目录添加到您的MATLAB路径:

addpath /path/to/Ftoolbox

无论当前目录是什么,都可以在MATLAB中使用所有这些功能。


在MEX文件中,入口点(mexFunction)仅检查第一个输入参数。根据其值,它将调用一系列内部函数之一。每个检查并转换其余的输入参数,并调用相关的Fortran函数。这些功能或多或少与单个mexFunction的方式相同。因此,不要求各个Fortran函数具有相似的输入参数集。

This is an example of such a MEX-file in C++,在Fortran中,您可以做完全相同的事情。