您的位置:首页 > 编程语言 > MATLAB

VS2010调用MatlabR2010b的图形引擎

2017-02-28 11:41 309 查看
VS2010调用MatlabR2010b的图形引擎

参考自:http://www.cnblogs.com/Vonng/p/4232586.html?utm_source=tuicool&utm_medium=referral

一、介绍

用C++调用Matlab图形引擎,主要是利用COM组件服务。将Matlab作为COM Server,接受Client应用程序的请求。Matlab的m脚本是一种解释性语言,因此大多数调用都是直接通过传递命令字符串的eval方法实现的。

具体流程:

(1)通过C++ 程序,包含Matlab提供的头文件engine.h;

(安装目录文件下:D:\Program File\matlab2010\extern\include)



(2)利用Matlab提供的静态库文件libeng.lib,libmx.lib;

(位于D:\Program File\matlab2010\extern\lib\win32\microsoft)





(3)利用Matlab提供的动态链接库.dll文件.

(位于目录:D:\Program File\matlab2010\bin\win32)



二、实例演示
1、新建一个空项目,然后添加.cpp文件,其代码为:

#include<cstdlib>
#include <cstdio>
#include<cstring>
#include"engine.h"
 
const int BUFFER_SIZE = 1024;
char buffer[BUFFER_SIZE];
void test()
{
    Engine* ep;
     mxArray *x1 = NULL;
     mxArray *y1 = NULL;
    if ((ep = engOpen("")) == NULL)
     {
         printf("Engine Fail");
     }
     engOutputBuffer(ep, buffer, BUFFER_SIZE);
     printf("Init Success");
 
     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(ep, "x", x1);
     engPutVariable(ep, "y", y1);
     engEvalString(ep, "plot(x,y)");
     getchar();
     engClose(ep);
}
 
int main()
{
     test();
}


2、配置开发环境

(1)我的Matlab版本是32位的。选择“生成----->配置管理器”,活动平台选择Win32(64位系统选择X64)。



(2)相关库文件和头文件的配置。

通过“项目----->属性----->VC++目录”,设置:







可执行程序目录为D:\Program File\matlab2010\bin\win32(.dll库文件所在目录);

包含目录:D:\Program File\matlab2010\extern\include(头文件所在目录);

库目录:D:\Program File\matlab2010\extern\lib\win32\microsoft(.lib库文件所在目录)。

(3)包含.lib库文件

通过“项目----->属性----->链接器--->输入---->附加依赖项”;



3、编译程序与运行

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: