您的位置:首页 > 编程语言 > MATLAB

c++ matlab 混编经验

2013-11-28 21:21 197 查看
软件安装流程:http://bss.csdn.net/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数组中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: