我的计算机环境是win8 64位系统,VS2010,matlab R2010b
step1:
新建项目 项目属性设置:
VC++目录
->包含目录 添加:
MATLAB\R2010b\extern\include
MATLAB\R2010b\extern\include\win64
->库目录 添加:
MATLAB\R2010b\extern\lib\win64\microsoft
链接器
->输入->附加依赖库 添加:
libmat.lib
libmx.lib
libmex.lib
libeng.lib
step2:
计算机环境变量path 添加:
MATLAB\R2010b\bin\win64;
step3:
由于所安装的matlab为64位,要调用其函数,需要将工程转换为X64
vs2010菜单
生成->配置管理器->平台:X64
项目属性
链接器->高级->目标计算机:
MachineX64(/MACHINE:X64)
step4:
关闭vs2010重新打开项目,测试(顺便用了Eigen库)
// com_mat_read.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "mat.h"
#include "Eigen/Dense"
#include "iostream"
using Eigen::MatrixXd;
using namespace Eigen;
using namespace std;
void readmat(const char *filename,const char *variablename,MatrixXd & matdata)
{
mwSize M,N;
double *initA;
const char *myfile;
MATFile *pmatFile = NULL;
mxArray *pMxArray = NULL;
myfile=filename;
pmatFile = matOpen(myfile,"r");
pMxArray = matGetVariable(pmatFile, variablename);
initA = (double*) mxGetData(pMxArray);
M = mxGetM(pMxArray);
N = mxGetN(pMxArray);
MatrixXd inputux(M,N);
printf("%d * %d matrix:datamat\n",M,N);
for (int i=0; i<M; i++)
for (int j=0; j<N; j++)
inputux(i,j) = initA[M*j+i];
matClose(pmatFile);
mxFree(initA);
matdata=inputux;
}
void test()
{
char filename[2][20]={"inputx.mat","inputP.mat"};
char variablename[2][20]={"inputx","inputP"};
MatrixXd A[2];
for(int i=0;i<2;++i)
{
readmat(filename[i],variablename[i],A[i]);
}
//cout<<A[0]<<endl<<A[1]<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
test();
return 0;
}