||
从Matlab 2008开始才能支持VS2008,所以这里写一个例子介绍如何将二者结合,生成 .dll文件进行混合编程(前面一篇介绍的是C语言与matlab的结合,这里给出C++与matlab结合的例子)。
首先,为matlab安装mex和mbuild并配置好环境变量(与以前的步骤相同)。
下面给出一个具体的实例进行讲解:
在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,错误
这是因为头文件的相对位置不对,把调用matlab的driver头文件放在#include "mclcppclass.h"的前边或者不用#include "mclcppclass.h",因为它就包含在调用matlab的driver头文件中。
GMT+8, 2024-11-5 15:54 , Processed in 0.033597 second(s), 16 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.