c++ matlab 混编经验

软件安装流程:http://bss.youkuaiyun.com/cview/reg/?project_id=1249&identy_id=1198

开发平台的配置:

在matlab中输入(格外注意空格)

①mex -setup   %若新安装matlab,从第一步开始执行,日后从第三步执行即可

②mbuild -setup

③mcc -W cpplib:XXX -T link:lib XX.m     %XXX为生成的文件的名字,XX为你需要编译的文件的名字

在c++环境中配置属性:

①项目属性->C++->常规->附加包含目录->

matlab安装目录\extern\include   //为了包含头文件

②项目属性->链接器->常规->附加库目录->

安装目录\extern\lib\win32\mircrosoft  //为了包含.lib

自己库文件的目录

③项目属性->链接器->输入->附加依赖项->XX.lib(需要什么库自己加载,如果不清楚需要什么可以在上面的附加库目录里找,一般可以加mclmcrrt.lib libmx.lib,另加上自己的库文件,格式上需要注意,每个库之间用enter键分开,但之间不得有空行)


在C++环境下调用:

①在初始化中添加 

if(!mclnitializeApplication(NULL,0))

AfxMessageBox("Error!");

XXXInitialize();

②在调用处直接调用头文件里封装的函数,一般是最后一个函数 若格式为: extern LIB_libdynamic_CPP_API void MW_CALL_CONV dynamic(ing nargout,mwArray& a,mwArray& b,const mwArray& c);

则nargout为输出参数的个数,此处前两个为输出,最后一个静态矩阵c为输入。

③数据传输时用用矩阵格式 mwArray//sizeof(mwArray)=8.

数值定义方式 mwArray   A(25);

数组定义方式 mwArray   A(10,12,mxDOUBLE_CLASS);//双精度型

 若matlab中数据为   1 2 3 4 

           5 6 7 8

则c++中的传回值为  1 5 2 6 3 7 4 8

mwArray与matlab中的分配方式是相同的,但是当用GetData获得数据后,则是先列后行。

注意点:

①图片路径在matlab中可以采用相对路径,在c++里要用绝对路径。matlab里路径格式为 ‘F:\1.bmp’,C++ 中的路径格式为 “F:\\1.bmp”。要注意单双引号的区别,以及单反斜杠和双反斜杠的区别。

*②matlab中的多维矩阵  在c里作为输出调用时可以不预留出内存,不会影响数据使用。但是在c里用getdata传递数据时,第二个参数只能比矩阵的大小小,否则报错。这时就要注意,此参数的确定要慎重,因为矩阵没有预留大小,所以此参的最大值是随图片不同而变化的。

③注意所有关于double的数据的大小判断,皆不能用==号,需要用>0.0001之类的。

如何保证不因参数大小而出错?

设想一:尽可能的将矩阵初始化为一个比较大的大小。而且将所有值初始化为0.有待尝试……初始化第二个数值时报错。看来我是没找到初始化的方法,setdata用法上有什么讲究?

设想二:在c中定义数组时预留大空间,在matlab返回数据的时候同时返回数据长度,这样mwArray.GetData(double,length)时,将length设定为返回的数据长度,即可将矩阵的值放在double数组中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值