我的环境 matlab7.0, vs2012.执行mex -setup 和mbuild -setup 是选的vc6,vs执行命令的时候不可见
参考1:http://www.ilovematlab.cn/thread-205148-1-1.html
http://blog.csdn.net/nupt123456789/article/details/7463612
调用matlab动态库,使用matlab2010b可以,使用matlab7.0不可以,好像是7.0的问题,有大神碰到过可以指教一下哦。谢谢
//以上是调用动态库
//以下是调用matlab的figure画图
参考2:http://blog.csdn.net/u010177286/article/details/37561113 //一些添加注释的方法
参考3:http://blog.csdn.net/feichizhongwu888/article/details/47277565 //引擎的函数介绍,妻例子我没编译过
参考4:http://blog.sina.com.cn/s/blog_8e6bfecf010126pg.html //这个例子的数据是写好的无法传自己想要的数据,主要可以参考 他的工程的配置方法。
参考5:http://www.tuicool.com/articles/JZzmmiB //这个不错,有一点小问题,engClose(ep);要重写,可能是网页格式的问题,非常感谢
我的例子如下:
void CMFCmtalabDlg::OnBnClickedOk2()
{
Engine* ep;
mxArray *x1 = NULL;
mxArray *y1 = NULL;
mxArray *x2 = NULL;
mxArray *y2 = NULL;
ep = engOpen(NULL);
if( ep==NULL )
{
printf("engine not found!\n");
exit(-1);
}
//engOutputBuffer(ep, buffer, BUFFER_SIZE);
printf("Init Success");
double x[5] = { 2.0, 4.5,6.7,8.4,9.1 };
double y[5] = { 3.3,4.7,9.6,15.6,21.3 };
double xArr[5] = { 1.0,2.0,3.0,4.0,5.0 };
double yArr[5] = { 4.0,8.0,12.0,16.0,20.0 };
x1 = mxCreateDoubleMatrix(1, 5, mxREAL);
y1 = mxCreateDoubleMatrix(1, 5, mxREAL);
x2 = mxCreateDoubleMatrix(1, 5, mxREAL);
y2 = mxCreateDoubleMatrix(1, 5, mxREAL);
memcpy((void *)mxGetPr(x1), (void *)x, sizeof(x));
memcpy((void *)mxGetPr(y1), (void *)y, sizeof(y));
memcpy((void *)mxGetPr(x2), (void *)xArr, sizeof(xArr));
memcpy((void *)mxGetPr(y2), (void *)yArr, sizeof(yArr));
engPutVariable(ep, "x2", x2);
engPutVariable(ep, "y2", y2);
engPutVariable(ep, "x1", x1);
engPutVariable(ep, "y1", y1);
//engEvalString(ep, "plot(x1,y1)");
//engEvalString(ep, "hold on");
//engEvalString(ep, "plot(x2,y2)");
//或
engEvalString(ep, "plot(x1,y1,'r',x2,y2,'g')"); //y1是红色,y2是绿色
engEvalString(ep, "title('This psq test!')");
engEvalString(ep, "xlabel('时间')");
engEvalString(ep, "ylabel('电压')");
engEvalString(ep, "text(2,5,'曲线y1=x')");//添加曲线注释
engEvalString(ep, "legend('电压','电流') ");//加图例
}
//以上这个姿势是一下画2条曲线,也可以在2个button中去响应画2次,但颜色会一样,Engine* ep;是局部变量或成员变量无所谓,不改变什么
//以下这2个函数是使用的成员变量,每次只显示以1条曲线,在一个图中,
void CMFCmtalabDlg::OnBnClickedOk3()
{
if(m_ep != NULL)
{
engClose(m_ep);
}
Sleep(1000); //这个不能少,
m_ep = engOpen(NULL);
if( m_ep==NULL )
{
MessageBox(_T("could not open 引擎指针"));
}
mxArray *x1 = NULL;
mxArray *y1 = NULL;
double x[5] = { 1.0, 2.5,3.7,4.4,5.1 };
double y[5] = { 3.3,4.7,9.6,15.6,21.3 };
x1 = mxCreateDoubleMatrix(1, 5, mxREAL);
y1 = mxCreateDoubleMatrix(1, 5, mxREAL);
memcpy((void *)mxGetPr(x1), (void *)x, sizeof(x));
memcpy((void *)mxGetPr(y1), (void *)y, sizeof(y));
engPutVariable(m_ep, "x1", x1);
engPutVariable(m_ep, "y1", y1);
engEvalString(m_ep, "plot(x1,y1)");
engEvalString(m_ep, "hold on");
}
//OnBnClickedOk3和 是指画一个
void CMFCmtalabDlg::OnBnClickedOk4()
{
if(m_ep != NULL)
{
engClose(m_ep);
}
Sleep(1000);
m_ep = engOpen(NULL);
if( m_ep==NULL )
{
MessageBox(_T("could not open 引擎指针"));
}
mxArray *x2 = NULL;
mxArray *y2 = NULL;
double xArr[5] = { 1.0,2.0,3.0,4.0,5.0 };
double yArr[5] = { 4.0,8.0,12.0,16.0,20.0 };
x2 = mxCreateDoubleMatrix(1, 5, mxREAL);
y2 = mxCreateDoubleMatrix(1, 5, mxREAL);
memcpy((void *)mxGetPr(x2), (void *)xArr, sizeof(xArr));
memcpy((void *)mxGetPr(y2), (void *)yArr, sizeof(yArr));
engPutVariable(m_ep, "x2", x2);
engPutVariable(m_ep, "y2", y2);
engEvalString(m_ep, "plot(x2,y2,'r')"); //红色的曲线
engEvalString(m_ep, "hold on");
engEvalString(m_ep, "title('This psq test!')");
engEvalString(m_ep, "xlabel('时间')");
engEvalString(m_ep, "ylabel('电压')");
}