VC调用Matlab生成的dll文件

发布时间:2019-06-29 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了VC调用Matlab生成的dll文件脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

通常在实现图像处理的算法时我们使用Matlab编程,因为它具有丰富的库函数以及操作方便,然而在工程项目中通常使用C/C++语言。如果我们将matlab代码完全重写成C++代码会很麻烦,最好的办法是借助matlab与C/C++接口将.m程序转成dll文件!

一、使用matlab将.m转成dll文件
1、在命令行中输入mex -SETUP
提示你是否要在本地安装matlab compilers,然后选择compiler类型,有matlab自带的编辑器以及检测到的其他编辑器,比如“Microsoft Visual C/C++ version 6.0 in E:PRogram FilESMicrosoft Visual Studio”,根据自己实际情况选择。

2、在命令行中输入mbuild -setup
这里的选项和上面类似,依次选择环境确定。

3、生成dll文件
一句命令mcc -W cpplib:add -t link:lib add.m
前面的add表示生成的dll文件名,后面的add.m顾名思义是.m文件名。生成后会多出8个文件,有用的是add.ctf add.dll add.lib add.h4个文件,据说新版的Matlab不会生成.ctf文件。

二、VC6.0中调用生成的dll文件
上面生成的dll文件,我们可以借助VC6.0的DePEnds工具查看导出函数名,但是我们要调用导出函数必须要知道函数的形参返回类型等,这里要借助.h文件,它包含了导出函数的声明,下面以实例来讲解使用方法:
1、add.m文件

function [a,b]=add(x,y) 
a=2*x+y; 
b=3*y;
end

注意了add函数有两个返回值,可以猜测一下在C++中是如何处理的;

2、add.h文件
截取其中一段关键代码如下:

extern void add(int nargout, mwArray& a, mwArray& b
                , const mwArray& x, const mwArray& y);

实际上函数的返回是变相的放到形参中的,依次是输出参数个数,输出参数,输入参数。PS 现在做的这个项目中用户自定义算法dll使用的规则和这里类似!

3、C++中调用dll文件
(1)新建空工程,将上面提及的4个文件放到工程目录下;
(2)VC++目录中包含目录:matlab 内的include目录
比如我的是 E:MATLAB7externinclude
(3)VC++目录中库目录:matlab 内的lib目录
E:MATLAB7externlibwin32microsoftmsvc60,要根据VC++版本修改!
(4)工程属性-》连接-》输入-》附加依赖项
输入:add.lib mclmcrrt.lib mclmcr.lib,第一个是生成的。或者在预处理中加入下面代码

#pragma comment(lib, "mclmcrrt.lib")
#pragma comment(lib, "mclmcr.lib")
#pragma comment(lib, "add.lib")

4、C++代码

#include <iostream>
#include "add.h"
using namespace std;
int main()
{
    if(!addInitialize())
    {
        cout<<"initilize failed!!!"<<endl;
        return -1;
    }

    mwArray a(1,1,mxDOUBLE_CLASS);
    mwArray b(1,1,mxDOUBLE_CLASS);

    a(1,1)=20;
    b(1,1)=30;

    mwArray x(1,1,mxDOUBLE_CLASS);
    mwArray y(1,1,mxDOUBLE_CLASS);

    //输出参数个数,输出参数,输入参数。
    add(2,x,y,a,b);

    double *i=new double;
    double *j=new double ;

    x.GetData(i,1);
    y.GetData(j,1);    

    cout<<"x="<<*i<<"  y="<<*j<<endl; 
    getchar();
    return 0;
}

注意:addInitialize()一定要!

最后附上实现代码(含.m文件和c++程序)点击下载

脚本宝典总结

以上是脚本宝典为你收集整理的VC调用Matlab生成的dll文件全部内容,希望文章能够帮你解决VC调用Matlab生成的dll文件所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。