找回密码
 注册
Simdroid-非首页
查看: 252|回复: 6

【原创】多个mex函数的合并

[复制链接]
发表于 2007-5-4 14:30:50 | 显示全部楼层 |阅读模式 来自 浙江舟山
为了扩展MATLAB的功能,或者提高速度,我们通常会编写一些mex函数应用到matlab中。但是由于一个文件中只能包含一个mex函数,随着规模的扩大在一个程序中会存在很多个mex文件,而且这些文件一般都很小。当程序编译为脱离matlab的可执行程序时,这么多的mex文件会使得程序启动速度比较慢。那么有没有可能在一个mex文件中包含多个函数呢?本文的目的便在于此。

以将两个函数 Fun1 和 Fun2 为例演示如何将其合并到一个mex文件中。

实现步骤:
1. 添加头文件 "FunTable.h"
    #include "FunTable.h"
2. 将原 mex 函数中的 mexFunction 成其它名字
3. 使用 ADD_TO_FUN_TABLE 将该函数加入到函数地址表中
4. 使用如下命令进行编译:
    mex mexMultiFun.cpp  Fun1.cpp  Fun2.cpp
    其中 Fun1.cpp 和 Fun2.cpp 为合并得 mex 函数原程序名称。

文件:Fun1.cpp
  1. #include "mex.h"
  2. #include "FunTable.h"
  3. // 目标函数一
  4. void Fun1(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
  5. {
  6.     if(nrhs != 1) mexErrMsgTxt("需要一个输入参数!");
  7.     if(nlhs != 1) mexErrMsgTxt("需要一个输出参数!");
  8.     plhs[0] = mxDuplicateArray(prhs[0]);
  9. }
  10. // 添加到函数表中
  11. ADD_TO_FUN_TABLE("Fun1", Fun1)
复制代码
文件:Fun2.cpp
  1. #include "mex.h"
  2. #include "FunTable.h"
  3. // 目标函数二
  4. void Fun2(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
  5. {
  6.     if(nrhs != 2) mexErrMsgTxt("需要两个输入参数!");
  7.     if(nlhs != 2) mexErrMsgTxt("需要两个输出参数!");
  8.     plhs[0] = mxDuplicateArray(prhs[0]);
  9.     plhs[1] = mxDuplicateArray(prhs[1]);
  10. }
  11. // 添加到函数表中
  12. ADD_TO_FUN_TABLE("Fun2", Fun2)
复制代码
最后用 mex mexMultiFun.cpp  Fun1.cpp  Fun2.cpp 进行编译
合并后的函数调用方式如下:
A = mexMultiFun('Fun1', 1);
[B, C] = mexMultiFun('Fun2', 1, 2);

[ 本帖最后由 SCIE 于 2007-5-5 19:54 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2007-5-4 15:19:18 | 显示全部楼层 来自 湖北武汉
Simdroid开发平台
SCIE的这个贴让我想起了我这两天琢磨的一个问题MATLAB和VC混合编程的问题
我的想法也有这个多个MEX文件合并的问题
只不过,我在一个MEX函数中写了几个小函数,类似于GUI的
switch Action来决定调用哪个函数
等晚上,我把我的东西贴上来
 楼主| 发表于 2007-5-4 16:02:13 | 显示全部楼层 来自 浙江舟山
我的想法是尽量方便地把现有的mex函数合并到一个mex文件中,而且各个mex函数之间具有较强的独立性。而且只需要改一下原mex函数的函数名字,再用 ADD_TO_FUN_TABLE  加入到函数表中即可。
发表于 2007-5-13 13:36:52 | 显示全部楼层 来自 上海
才看到这么好的东西!
很有创意!支持一个!
回复 不支持

使用道具 举报

 楼主| 发表于 2007-5-13 16:12:42 | 显示全部楼层 来自 浙江舟山
原帖由 cwit 于 2007-5-13 13:36 发表
才看到这么好的东西!
很有创意!支持一个!


对于完成同一功能的一组mex函数完全可以做到一个mex文件中,这样会比较方便,而且合并的时候各个子函数之间可以保持完全的独立性,对于接口合并部分也是完全透明的。这个需求就是从你那里来的啊,希望能够在你那边得到应用和检验。
回复 不支持

使用道具 举报

发表于 2007-5-13 17:03:51 | 显示全部楼层 来自 湖北武汉
我本来五一的一个想法是MFC DLL+ MEX + C/C++数学库 + C图形库
这个东西比较好玩
不过
前几天在原smth的energy的书《扩展编程》上看到过这类提示
而且那上面也提到了点这个FUNCTION TABLE。
回复 不支持

使用道具 举报

发表于 2013-2-22 20:56:26 | 显示全部楼层 来自 甘肃
很有想法,谢谢SCIE

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-1 15:10 , Processed in 0.045108 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表