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个传入参数

 

转载于:https://www.cnblogs.com/redips-l/p/6727965.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值