ImxArray.h // ImxArray.h: interface for the ImxArray class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_IMXARRAY_H__EA2EBEA3_3A4D_4932_8E75_2773C81AC7FC__INCLUDED_) #define AFX_IMXARRAY_H__EA2EBEA3_3A4D_4932_8E75_2773C81AC7FC__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <engine.h> #include <typeinfo> #include <string> //matlab数据类型mxarray封装 #define MX_DATA_DOUBLE 1 //double #define MX_DATA_FLOAT 2 //double #define MX_DATA_BOOL 3 //bool #define MX_DATA_INT 4 //bool #define MX_DATA_UINT 5 //bool #define MX_DATA_INT64 6 //bool #define MX_DATA_UINT64 7 //bool #define MX_DATA_STRING 8 //string #define MX_DATA_NUMRIC_MATRIX 9 //数值矩阵 #define MX_DATA_NUMRIC_ARRAY 10 //数值阵列 #define MX_DATA_STRUCT 12 //结构体 //matrix #define MX_DATA_MATRIX_DOUBLE 21 //double #define MX_DATA_MATRIX_FLOAT 22 //double #define MX_DATA_MATRIX_BOOL 23 //bool #define MX_DATA_MATRIX_INT 24 //bool #define MX_DATA_MATRIX_UINT 25 //bool #define MX_DATA_MATRIX_INT64 26 //bool #define MX_DATA_MATRIX_UINT64 27 //bool #define MX_DATA_MATRIX_STRING 28 //string #define MX_DATA_MATRIX_STRUCT 29 //结构体 //array #define MX_DATA_ARRAY_DOUBLE 31 //double #define MX_DATA_ARRAY_FLOAT 32 //double #define MX_DATA_ARRAY_BOOL 33 //bool #define MX_DATA_ARRAY_INT 34 //bool #define MX_DATA_ARRAY_UINT 35 //bool #define MX_DATA_ARRAY_INT64 36 //bool #define MX_DATA_ARRAY_UINT64 37 //bool #define MX_DATA_ARRAY_STRING 38 //string #define MX_DATA_ARRAY_STRUCT 39 //结构体 /************************************************************************/ /* matlab&c++ author:san address:南京航空航天大学 CEPE 202 EMAIL:visualsan@yahoo.cn This file is part of matlab&c++ interface. feel easy to use it. san. 2010.3. */ /************************************************************************/ #pragma comment( lib, "libeng.lib" ) #define MAT_API //_declspec(dllexport) class MAT_API ImxArray { public: ImxArray(); virtual ~ImxArray(); virtual mxArray* GetArray(){ return m_pArray;} virtual bool SetArray(mxArray* pArray,bool bCopy=0){ return 1;}; int GetType() { return m_dataType;} const char* GetTypeName() { return m_szTypeName;} protected: mxArray *m_pArray; int m_dataType; char m_szTypeName[64]; }; #endif // !defined(AFX_IMXARRAY_H__EA2EBEA3_3A4D_4932_8E75_2773C81AC7FC__INCLUDED_) ImxArray.cpp // ImxArray.cpp: implementation of the ImxArray class. // ////////////////////////////////////////////////////////////////////// #include "ImxArray.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// ImxArray::ImxArray() { m_pArray=0; } ImxArray::~ImxArray() { if(m_pArray) mxDestroyArray(m_pArray); } xBool.h // xBool.h: interface for the xBool class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_XBOOL_H__2F4D06D6_D8B1_4115_9A78_55BA32DD6982__INCLUDED_) #define AFX_XBOOL_H__2F4D06D6_D8B1_4115_9A78_55BA32DD6982__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ImxArray.h" class MAT_API xBool:public ImxArray { public: xBool(bool val=true); virtual ~xBool(); bool GetData(); void SetData(bool b); virtual bool SetArray(mxArray* pArray,bool bCopy=0); }; #endif // !defined(AFX_XBOOL_H__2F4D06D6_D8B1_4115_9A78_55BA32DD6982__INCLUDED_) xBool.cpp // xBool.cpp: implementation of the xBool class. // ////////////////////////////////////////////////////////////////////// #include "xBool.h" ////////////////////////////////////////////// xBool::xBool(bool val) { strcpy(m_szTypeName,"bool"); m_dataType = MX_DATA_BOOL; m_pArray = mxCreateLogicalScalar(val); } xBool::~xBool() { } bool xBool::GetData() { return mxGetLogicals(m_pArray)[0]; } void xBool::SetData(bool b) { mxGetLogicals(m_pArray)[0] = b; } bool xBool::SetArray(mxArray* pArray,bool bCopy) { if ( mxIsLogical(pArray) ) { if(bCopy) pArray=mxDuplicateArray(pArray); int n=mxGetNumberOfDimensions(pArray); if(n==2) { mxDestroyArray(m_pArray); m_pArray=pArray; return 1; } } return 0; } xString.h // xString.h: interface for the xString class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_XSTRING_H__ED3195F9_393F_425D_99A0_14EC1F0B2635__INCLUDED_) #define AFX_XSTRING_H__ED3195F9_393F_425D_99A0_14EC1F0B2635__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ImxArray.h" class MAT_API xString :public ImxArray { public: xString(char *str="string"); virtual ~xString(); std::string GetString(); void SetString(char*str); virtual bool SetArray(mxArray* pArray,bool bCopy=0); private: std::string m_buffer; }; #endif // !defined(AFX_XSTRING_H__ED3195F9_393F_425D_99A0_14EC1F0B2635__INCLUDED_) xString.cpp // xString.cpp: implementation of the xString class. // ////////////////////////////////////////////////////////////////////// #include "xString.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// xString::xString(char *str) { strcpy(m_szTypeName,"string"); m_dataType = MX_DATA_STRING; m_pArray = mxCreateString(str); m_buffer = str; } xString::~xString() { } std::string xString::GetString() { return m_buffer; } void xString::SetString(char*str) { mxDestroyArray(m_pArray); m_pArray = mxCreateString(str); m_buffer = str; } bool xString::SetArray(mxArray* pArray,bool bCopy) { static char str[20000]; if ( mxIsChar(pArray) ) { if(bCopy) pArray = mxDuplicateArray(pArray); int n=mxGetNumberOfDimensions(pArray); if(n==2) { mxDestroyArray(m_pArray); m_pArray=pArray; mxGetString(m_pArray,str,20000); m_buffer=str; return 1; } } return 0; }