matlab 7与vc/mfc混合编程 脱离运行环境,移植代码

一、问题提示
 
7.0/7.1版本有个问题:
 
Warning: No matching builtin function available for C:\MATLAB7\install\toolbox\simulink\simulink\set_param.bi
 
或者mcc变成m文件成可执行文件exe后,运行会出现:
 
Undefined command/function 'set_param'
Error in ==> matlabrc at 81
 
解决方法:
1、将\MATLAB7\toolbox\compiler\deploy\matlabrc.m 中的
81行  set_param(0,'PaperType',defaultpaper);
82行  set_param(0,'PaperUnits',defaultunits);
注释掉,或者干脆删掉。
2、在Matlab7 的命令窗口运行rehash toolboxcache
3、重新编译文件后即可运行。
二、脱离环境:
 
将MATLAB7\install\toolbox\compiler\deploy\win32\MCRInstaller.exe
 
拷贝到没有安装matlab的机器上,运行安装,就可以脱离matlab环境运行了。
 
三、混合 编程
 
最好将vc编译的exe的生成目录直接生成到matlab的m文件生成的dll目录下面。
 
一个方便动态调用matlab生成的dll,二个方便直接调试执行。
 
1. matlab命令行中:mcc -W lib:abcdef_dll -T link:lib abcdef.m
 
注意,这个命令要求当前目录(matlab窗口上方可以切换工作目录)存在abcdef.m;另外这个动态链接库的名字加上_dll是为了不跟matlab的命令冲突,不然,你直接在matlab中输入abcdef,想执行m函数(自己些的代码),结果他会先找dll,报错的。
 
2.vc中在工具->选项,中的include跟lib目录中加上(以下以6.0为例,假设要转换abcdef.m):
 
inlucde中加上:
 
C:\MATLAB7\install\work
 
C:\MATLAB7\install\extern\include
 
lib中加上:
 
C:\MATLAB7\install\extern\lib\win32\microsoft\msvc60
 
C:\MATLAB7\install\work
 
所以这儿强烈简易自己要编译成dll的m文件就放在
 
C:\MATLAB7\install\work中,不然matlab编译的h/lib文件,还得手工添加进来。
 
3.vc中调用(红色的是跟dll名称有关的):
 
#include "abcdef_dll.h"
#include "mclmcr.h"
#pragma comment (lib,"abcdef_dll.lib")
#pragma comment (lib,"mclmcrrt.lib")
#pragma comment (lib,"mclmcr.lib")
 
在初始化代码中:
 
 if (!mclInitializeApplication(NULL,0))    
 {AfxMessageBox("不能初始化程序!");return 0;}
 bool result=print2_dllInitialize();  //初始化
 
 if(result==FALSE)
 
 {  
  int i=GetLastError();
    MessageBox("初始化失败,请重新点击该按键!",LPCTSTR(L"提示信息:"),MB_OK|MB_ICONINFORMATION);
 
 }
 
调用代码:
 
 mxArray* y=NULL; 
 mxArray* z=NULL; 
 double power[12]={3.0,4,3,4,5,6,7,8,9,10,11,12};
 mxArray *P_matlab = mxCreateDoubleMatrix(1,12,mxREAL);
 double* data =mxGetPr(P_matlab);
 //memcpy(mxGetPr(P_matlab),power,sizeof(double)*sizeof(power));
 for (int i = 0; i < 12; i++)
 {
  data[i]=power[i];
 }
 char szTmp[1024];
     sprintf(szTmp,"传递字符");
  mxArray* m = mxCreateString(szTmp);
 mlfabcdef(1,&y,P_matlab,m); ///传递了一个数组,一个字符串
 
mxDestroyArray(P_matlab);
 
 
 
退出或者失构函数:
 
 abcdef_dllTerminate();
 mclTerminateApplication();
 
四、软件发布
 
1.MCRInstaller.exe做安装包的时候一起打包,并自动执行
 
2.拷贝matlab编译好的dll/ctf两个文件就可以(其他.h/lib/c文件,是编译的时候用的,不用发布)。
 
 转自 http://www.2cto.com/kf/201204/128654.html
 
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《精通MATLAB与C/C++混合编程第3版》是一本专门介绍如何在MATLAB和C/C++之间进行混合编程的书籍。混合编程是指在MATLAB中调用C/C++代码,以提高程序的效率和性能。 这本书主要包含了以下内容:首先介绍了MATLAB和C/C++的基本知识,如MATLAB脚本语言和C/C++的语法、函数和变量的使用等。然后详细介绍了如何在MATLAB中调用C/C++代码,包括如何编写MEX文件(MATLAB可执行文件),以及如何在MATLAB环境中编译和运行这些文件。此外,还介绍了如何在MATLAB中使用C/C++的库函数和数据结构。 书中还讲解了一些高级的主题,如如何优化MATLAB和C/C++代码的性能、如何处理复杂的数据类型和多线程编程等。此外,还提供了一些实际案例和例子,帮助读者更好地理解和掌握混合编程的技巧和方法。 这本书的优点在于结合了MATLAB和C/C++的实际应用,介绍了大量的实际案例和技巧,对于想要学习如何在MATLAB和C/C++之间进行混合编程的人来说非常有用。无论是初学者还是有一定编程经验的人,都可以通过这本书提高自己的编程水平,提升自己的工作效率。 综上所述,《精通MATLAB与C/C++混合编程第3版》是一本非常实用的书籍,对于想要深入学习和应用MATLAB和C/C++混合编程的人来说是必备的参考资料。它不仅能够帮助读者了解MATLAB和C/C++之间的关系,还可以提升他们的编程水平和解决实际问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值