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;
}


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