我正在使用Intel Fortran编译要在MATLAB中使用的MEX文件。 (MEX文件是dll的公开代码,在本例中为MATLAB的fortran函数。)我要向MATLAB公开的每个Fortran函数均与一个MEX文件关联。最初,我是在命令行中执行此操作的,并希望移至Visual Studio。一个功能is here的Visual Studio示例。
由于我有很多函数,所以我不想为每个函数创建一个Visual Studio项目,并且我希望有一个DLL MEX文件,其中包含我想导出到MATLAB的所有Fortran函数。可以做到吗?如果可以,怎么办?
答案 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中,您可以做完全相同的事情。