VC和Matlab混合编程之调用Engine引擎方式

 Matlab Engine是一组Matlab提供的接口函数,支持C/C++语言,Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C/C++程序作为前台客户机,向Matlab Engine传递执行命令和数据信息,从Matlab Engine接收执行结果。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,缺点是执行效率较低。下面简单介绍下这种方式的实现步骤:
  1. API接口介绍

先来介绍一组Matlab提供的引擎API接口:(仅作简单功能介绍,详细参数说明请参考Matlab帮助)

Engine* engOpen(const char* startcmd)启动Matlab引擎

int engClose(Engine* ep) 关闭Matlab引擎

int engSetVisible(Engine* ep,bool value) 显示或隐匿窗口

int engEvalString(Engine* ep, const char* string)执行Matlab表达式

mxArray* engGetArray(Engine* ep, const char* name)获取一个变量数组的值

int engPutArray(engine* ep, const mxArray* mp)设置一个变量数组的值

int engPutVariable(Engine *ep, const char *name, const mxArray *pm)同上

mxArray *engGetVariable(Engine *ep, const char *name)获取一个变量

int engOutputBuffer(Engine* eP,char* p,int n)获取输出字符串

2 按照之前的配置好matlab和VS2010,编程如下:

#include
/*********************************
引擎调用
*******************************/
#include"engine.h"


// link matlab sys lib
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")
#pragma comment(lib,"libmat.lib")


int main(int argc, _TCHAR* argv[])
{
    Engine* pEng=NULL;
    if(!(pEng=engOpen(NULL)))
    {
        printf("Open matlab engine fail!\n");
        return 0;
    }
    else
       printf("Open Engine Sucess!\n");
    engSetVisible(pEng,0);//隐藏matlab窗口

    mxArray *A=NULL;
    double init=2;
    A=mxCreateDoubleMatrix(1,1,mxREAL);
    memcpy((void*)mxGetPr(A),(void*)&init,sizeof(double));
    engPutVariable(pEng,"A",A);

    init = 1;
    memcpy((void*)mxGetPr(A),(void*)&init,sizeof(double));
    engPutVariable(pEng,"B",A);

    mxDestroyArray(A);

    //Sleep(3*60*1000);
    printf("start to create the fig\n");
    engEvalString(pEng,"t=0:0.2:7;plot(t,sin(t));");
    engEvalString(pEng,"figure;");
    engEvalString(pEng,"plot(t,A*cos(t)+B);");
    printf("Engine will be closed\n");
    system("pause");
    if(NULL!=pEng)
        engClose(pEng);
    printf("Engine is closed");
    return 0;
}

程序运行结果如下:VC和Matlab混合编程之调用Engine引擎方式_第1张图片
VC和Matlab混合编程之调用Engine引擎方式_第2张图片
  
  <精通matlab混合编程>
  http://www.cnblogs.com/xpvincent/archive/2013/02/05/2893046.html
  http://blog.sina.com.cn/s/blog_7e2e98ad0101hef2.html(MAIN)

你可能感兴趣的:(matlab)