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、编译程序与运行