c++matlab混编

最近在搞组里项目,需要用到C++调用Matlab的DLL,在网上查阅了一些资料终于取得一些成果,先总结如下:

首先,对Matlab的m文件进行编译生成C++的DLL与Lib文件。我用到的编译环境为Win7、Matlab2013a、Visual Stdio 2012.

1.设置Matlab的编译器

mex -setup


选择Y


选择1


完成mex编译器的设置

同样需要对mbuild进行配置

mbuid -setup

同样的选项

输入命令deploytool或选择

Matlab Compiler


弹出如下对话框


Type选择C++ Shared Library,点击ok选择添加已经编译好的m文件,点击编译即可


将distrib文件夹下的对应的dll、lib、h文件拷贝到自己的工程目录下。


在对C++工程进行配置的时候,首先要对计算机的环境变量进行配置,将Matlab的bin路径加载到环境变量中

我的电脑为D:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft;与D:\Program Files\MATLAB\R2013a\bin\win64,添加到用户路径与系统路径


然后对C++工程进行配置,需要包含目录路径与库目录

包含目录为:D:\Program Files\MATLAB\R2013a\extern\include与D:\Program Files\MATLAB\R2013a\extern\include\win64

库目录为:D:\Program Files\MATLAB\R2013a\extern\lib\win32\microsoft与D:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft


链接器->输入->附加依赖项:test.lib、mclmcrrt.lib、mclmcr.lib、libmx.lib、libmat.lib


完成以上配置即可对Matlab的Dll进行调用

需要注意的时Matlab编译生成的Dll中参数与m文件的参数会有所变化,如果函数有输出参数,那么编译以后该函数的第一个参数为输出参数的个数,后边依次为每个输出参数,然后为输入参数。同时需要注意的是Matlab生成的Dll中的函数只有mwArray一种数据类型,需要将C++中的数据类型转换为该类型。



如C++中有变量 int  a=1;

转换到Matlab中的函数需要定义为 mwArray mw_a(1, 1, mxINT32_CLASS);

因为Matlab只有矩阵类型的变量,所以需要这样定义,1, 1为a的列数与行数,这里需要特别注意,如果传入到Matlab函数的变量内部运算的话一定要保证变量的类型一致否则会出现Error using==> times Integers only can be combined integers……,出现这个错误就是因为不同类型的两个变量做了运算,所以一定要检查好m文件中每个变量的类型是否一致,以及C++中传入都Matlab函数中的变量类型是否与Matlab的函数所需类型一致,否则就会出现错误!


为了处理Maltab函数的异常可以利用try……catch来接受Matlab函数传回的异常

如:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. try  
  2. {  
  3.      myfitline( x,y,m,xrange,t );//该函数为Matlab中定义的函数  
  4. }  
  5. catch(const mwException &ex)  
  6. {  
  7.      CString m_str;  
  8.      m_str = ex.what();  
  9.      MessageBox(m_str);  
  10.      return;  
  11. }  


这样就完成了对Matlab的Dll的调用工作

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值