《基于VS2010调用matlab2010b引擎实现混合编程》

特此说明:亲测有效@_卡拉不是考拉Kala

对于VC++与matlab的混合编程方法有多种,如调用matlab引擎、调用matlab的C/C++数学库和图像库或者是将编写好的matlab的.m文件编译成动态库.dll再进行调用。同样也可以反过来,利用matlab调用C/C++库等等。

看了网上有很多教程,根据教程一步步操作。结果发现都报错有问题,于是自己进行尝试,并进行测试并记录如下:

首先对于各个平台环境的选择如下:Win7 x64操作系统、matlab2010b x64、VS2010。根据网上教程VS2008和matlab2010b测试结果:error LNK2019: 无法解析的外部符号,能力有限尝试各种方法实在解决不了这个问题,于是乎换了上述的平台环境不存在这个问题,就暂且认为是兼容性引起的问题。

实现步骤如下:

1、新建一个命名为Call_engine 的win32控制台程序;

      2、配置环境:项目àCall_engine属性àVC++目录à包含目录中将matlab安装目录下的(我这里的安装目录为D:\ProgramFiles):D:\ProgramFiles\MATLAB\R2010b\extern\include添加进来,如图1所示;

图1

(添加包含目录)


3、配置环境:项目àCall_engine属性àVC++目录à库目录中将matlab安装目录下的:

D:\ProgramFiles\MATLAB\R2010b\extern\lib\win64\microsoft添加到库目录中,入图2所示;

图2

(添加库目录)


4、载入必要的.lib: 在项目àCall_engine属性à连接器à输入

à附加依赖项中添加libeng.lib、libmx.lib、libmat.lib(注意利用回车换行或者空格隔开)如图3所示;

图3

(添加附加依赖项)


5、在配置管理器中更改解决方案平台:在配置管理器中平台列,如果是win32平台,则点击下拉菜单:选择新建à新建平台àx64,如图4所示;

图4

(更改解决方案平台)


至此,环境配置完毕,开始写码测试。

测试代码如下(调用matlab的eig函数计算矩阵的特征值):

注:先包含头文件engine.h

#include "stdafx.h"

#include "engine.h"

#include <stdio.h>

#define BUFSIZE 128

int _tmain(intargc, _TCHAR*argv[])

{

       Engine*ep

       mxArray*T=NULL;

       char buffer[BUFSIZE];

       double a[][3]={1,2,3,1,2,3,1,2,3}; 

       if (!(ep =engOpen("\0")))

       {

              fprintf(stderr,"\nCan'tstart MATLAB engine\n");

              return EXIT_FAILURE;

       }    

       T = mxCreateDoubleMatrix(3, 3, mxREAL);

       memcpy((void *)mxGetPr(T), (void *)a,sizeof(double)*(sizeof(T)+1));

       engOutputBuffer(ep,buffer, BUFSIZE);

       engPutVariable(ep,"T",T);

       engEvalString(ep,"T'");

       printf("%s",buffer);   

       engEvalString(ep," X =eig(T')");

       printf("%s",buffer);

       return 0;

}

测试结果:


这里的代码就不作注释了,贴个matlab提供的各个API详解地址:

http://www.cnblogs.com/nktblog/archive/2012/04/07/2435686.html




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值