Matlab函数编译成dll供c调用

一 编译dll

在Command Window窗口中输入mbuild -setup,然后会出现语句,是否安装编译器,选择n,因为机子上已经安装了C/C++/C#的编译器,选择VS2010.

最后一切就绪后在窗口输入deploytool,会出现如下的框图,项目名称,存储位置和转化的类型选择C++ shared library,选择好之后,点击OK

这时出现了一个C++ Shared Library的窗口,将其最大化,下面有一个Exported Functions 里选择Add files将写好的matlab函数加进来,然后build,如下图

build 完成后刚才设定的文件夹下多了两个文件夹

然后就可以使用distrib中的dll了

 

二 使用

新建vs工程,配置包含目录和库目录

1.新生成的matlab函数的目录

2.matlab的目录,例如我的是D:\MATLAB2012\extern\include和D:\MATLAB2012\extern\lib\win64\microsoft。

并且在‘链接器->输入”中填入mclmcrrt.lib和刚生成的lib

3.编写代码

    void initBinoTable(int *result){
           // for(int i=4;i<666;i++)
        if(!getBinoTableInitialize()){
              std::cerr<<"get bino table failed"<<endl;
              return;
        }
        int tn = 222;
        double tp = MAX_ANGLE_DIFF*2.0/180.0;
        double tepsi = E_MEANINGFULL_ELLIPSE;
        
        mwArray n(1,1,mxUINT32_CLASS);
        mwArray p(1,1,mxDOUBLE_CLASS);
        mwArray epsi(1,1,mxDOUBLE_CLASS);
        mwArray ret(1,tn+1,mxUINT32_CLASS);

        n.SetData(&tn,1);
        p.SetData(&tp,1);
        epsi.SetData(&tepsi,1);

        getBinoTable(1,ret,n,p,epsi);    //入口函数
        
        ret.GetData(result,tn);
        
        getBinoTableTerminate();
    }

 

 mwArray为传入传出参数的类型,赋值方法如代码所示。用到的几个函数都可以在生成的.h里面找到,所以注意include这个.h文件,打开这个.h可以看到

extern LIB_getBinoTable_CPP_API void MW_CALL_CONV getBinoTable(int nargout, mwArray& result, const mwArray& N, const mwArray& p, const mwArray& epsi);

 这个主要函数,参数的意义分别为:返回参数的个数,返回参数,3个传入参数

 

posted @ 2017-04-18 15:16  redips  阅读(2241)  评论(0编辑  收藏  举报