最近在看C++和MATLAB的混合编程,结构体这种复杂的数据类型,通过mwArray传入MATLAB的DLL文件中,是比较复杂的。下面通过一个小程序,来实现结构体转wmArray类型。
VS2010和Matlab2012b混合编程
配置详解见:VS2010和Matlab2012b混合编程
#include<iostream>
#include "MyAddLib.h"
using namespace std;
int main()
{
if(!MyAddLibInitialize())
{
return -1;
}
int a = 1;
int b = 2;
int c = 0;
struct myStruct
{//定义一个结构体
bool flg;
int x;
};
myStruct mys;//声明一个结构体变量
mys.flg = true;//变量赋值
mys.x=10;
const int nfields = 2;//结构体内的变量个数
const char *fieldnames[2]={"flg","x"};//结构体内的变量名称
mwArray mwStruct(1,1,nfields,fieldnames);//声明一个wmArray类型变量
/*
mwArray(mwSize num_rows,mwSize num_cols,int num_fields,const char**fieldnames)
创建行数为num_rows,列数为num_cols结构体阵列,结构体域名为由fieldnames指定,域名个数由num_fields指定
*/
mwArray mflg(mys.flg);//
mwStruct(fieldnames[0],1,1)=mflg;//给结构体内的变量赋值
mwArray mx(mys.x);
mwStruct(fieldnames[1],1,1)=mx;//给结构体内的变量赋值
mwArray mwA(1,1,mxINT32_CLASS);//int型
mwArray mwB(1,1,mxINT32_CLASS);
mwArray mwC(1,1,mxINT32_CLASS);
mwA.SetData(&a,1);
mwB.SetData(&b,1);
MyAdd(1,mwC,mwA,mwB,mwStruct);
c = mwC.Get(1,1);
cout<<c<<endl;
// lib Terminate
MyAddLibTerminate();
// MCR Terminate
mclTerminateApplication();
getchar();
return 1;
}