其次,二者的内存管理方式不同。mxArray的内存管理方式比较松散,由于是C函数库,没有数据封装,必须对临时阵列和约束阵列的概念极为明确,并且须小心地防止内存泄漏(要多写好多代码)。尽管有自动内存管理机制(mlfEnterNewContext,mlfReleasePreviousContex
再次,这两个东西各自有一套与之相对应的函数。函数的返回值类型不同,需要多加注意。
最后,用的时候mxArray要使用指针,而mwArray直接当类对象使。如果你不是Hardcore级的牛人或具有Hardcore倾向的潜牛人 ,我强烈建议你使用后者!
举一个简单的例子:如果你需要计算c=a+b那么两者的区别是这样的:
mxArray:
void fun(){
……
double d_a=1,d_b=2;
mxArray *a,*b,*c;
mlfEnterNewContext(0,0);
mlfAssign(&a,mlfScalar(d_a));
mlfAssign(&b,mlfScalar(d_b));
mlfAssign(&c,mlfPlus(a,b));
……
mlfReleasePreviousContex
mxDestroyArray(a);
mxDestroyArray(b);
mxDestroyArray(c);
}
mwArray:
void fun(){
……
mwArray a,b,c;
a=1;
b=2;
c=a+b;
……
}
声明:
mxArray:
mxArray *a;
mwArray
mwArray a;
销毁
mxArray
mxDestroyArray a;
mwArray
mwArray类的析构函数自动销毁对象
变量传递
mxArray
memcpy(dest_ptr,source_ptr,MAX_SIZE);
mwArray
mwArray in1(3, 3, mxDOUBLE_CLASS, mxREAL); mwArray in2(3, 3, mxDOUBLE_CLASS, mxREAL); in1.SetData(data, 9); in2.SetData(data, 9);
比较而言,
1。mwArray的声明更简洁,不用考虑指针
2。mwArray不用手动释放内存
mwArray不用手动释放内存 关于VC与MATLAB混编的设置,见前几个转帖。
下面是这个例子用到的m代码。它定义了一个名为test的函数,保存在test.m文件中:
function y=test(x) y=sin(x); plot(x,y,'*');
工程中加入头文件:dlltest .h 设置工程的引用库:project—》links里添加mclmcrrt.lib dlltest.lib(注:debug和release是相互独立的) vc工程加入代码如下: #include "mclmcr.h" // mwArray声明 #include "dlltest.h" void CVCMATLABDlg::OnButton1() { // TODO: Add your control notification handler code here mclInitializeApplication