C++和MATLAB混合編程 mwArray 結構體傳入

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章