最近在看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;
}