我要加入 登录
声振论坛 返回首页

TNC的个人空间 http://home.vibunion.com/?20 [收藏] [复制] [分享] [RSS]

日志

C++与matlab混合编程再探(关于matlab 2008与VS2008的混合编程问题I)【zz】

已有 1915 次阅读2010-9-1 05:15 |个人分类:matlab|

Matlab 2008开始才能支持VS2008,所以这里写一个例子介绍如何将二者结合,生成 .dll文件进行混合编程(前面一篇介绍的是C语言与matlab的结合,这里给出C++matlab结合的例子)。

   首先,为matlab安装mexmbuild并配置好环境变量(与以前的步骤相同)。

   下面给出一个具体的实例进行讲解:

    matlab中写一个简单的inverse.m实现求矩阵的逆:

function y=inverse(a,NUM)

%NUM a的维数,这里没有什么实际意义

y=inv(a);

针对上面的例子创建状态链接库(在matlab中使用mcc命令):

mcc -C -W cpplib:libinverse -T link:lib inverse.m

注意1这里加了一个-C,这是因为在matlab2008中使用mcc -W cpplib:libinverse -T link:lib inverse.m.的时候,只会生成.lib .h .dll文件(注意,这四个文件的默认生成位置是:桌面。。\My Documents\MATLAB文件夹中),但并不会生成.ctf文件,那是因为matlab2008默认地把ctf文件放到别的文件中了,所以没有单独生成(你可以用mcc ?查一下),如果想要单独生成ctf文件,可以在里面加上-C这个选项,如上所示。

接下来,在VS2008中建立一个C++工程Test_matlab,使其调用这个.dll。把上面mcc命令生成的.lib .h .dll .ctf文件放到Test_matlab工程中,然后在VS中配置工程,需要配置以下几项:

  打开project->Test_matlab_properties->C/C++->general->Addational Include Directories MATLAB提供的include路径加到VC++的头文件搜索路 径加入。

  打开project->Test_matlab_properties->Linker->general->Addational Library Directories 把相应的lib所在目录加入。

 打开project->Test_matlab_properties->Linker->Input->Addational Dependencies .lib mclmcrrt.lib加入,中间用空格。


最后,把.h添加到VC++程序中,其主程序如下(请转II):


 

注意2有可能出现'mclInitializeApplication_proxy': identifier not found,错误

   这是因为头文件的相对位置不对,把调用matlabdriver头文件放在#include "mclcppclass.h"的前边或者不用#include "mclcppclass.h",因为它就包含在调用matlabdriver头文件中。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 我要加入

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-26 05:17 , Processed in 0.052510 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部