C语言调用matlab引擎和调用matlab生成的DLL文件

2016/10/22 15:30

参考:http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/

http://blog.csdn.net/sromg/article/details/8098026

matlab版本:R2012a,64位,VS2010
1:C语言调用matlab引擎。
   VS新建工程:
    设置项目属性:
包含以下两个目录,D:\Program Files\MATLAB\R2012a\extern\include和D:\Program Files\MATLAB\R2012a\extern\include\win64



matlab设置:

在matlab命令行输入mex -setup,按提示选择合适的选项

在matlab命令行输入mbuild -setup,按提示选择合适的选项

    系统环境变量设置:

       32位的是win32,64位的是win64.

Computer Properties -> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下为MATLAB 2012软件安装目录)

...\MATLAB\extern\lib\win32\microsoft;

...\MATLAB\bin\win32

Computer Properties -> Advanced system settings -> Environment Variables -> System Variables -> path, 添加

...\MATLAB\runtime\win32;

...\MATLAB\bin;

...\MATLAB\extern\lib\win32\microsoft;

...\MATLAB\bin\win32

//输入以下代码,参考上面网页链接

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "engine.h"//matlab engine header file
//connection
#pragma comment( lib, "libeng.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )

int main()
{
    Engine *ep;//open engine
    if (!(ep =engOpen("\0")))
    {
        fprintf(stderr,"\n Cann't start MATLAB engine \n");
        return EXIT_FAILURE;    
    }

    int Nsample=50;
    const double PI = 3.1415926;
    double *t = new double[Nsample];//

    for(int i = 0; i < Nsample; i++)
    {
        t[i] = i * 2 * PI / Nsample;
    }
    //将C数据格式转化为MATLAB格式数据
    mxArray *T = NULL, *result = NULL;//定义指针
    T = mxCreateDoubleMatrix(1, Nsample, mxREAL);
    //memcpy((void *)mxGetPr(T), (void *)t, Nsample*sizeof(t[0]));
    memcpy(mxGetPr(T), t, Nsample*sizeof(t[0]));
    //推送到matlab进行计算
    engPutVariable(ep, "T", T);//将数据送到matlab引擎

    engEvalString(ep, "Y=sin(T);");
    //engEvalString(ep, "Y=fft(T);");
    engEvalString(ep, "plot(T,Y);");

    engEvalString(ep, "title('y=sin(t)');");

    engEvalString(ep, "xlabel('t');");

    engEvalString(ep, "ylabel('y');");

    printf("Hit return to continue\n\n");
    fgetc(stdin);
    //清楚变量
    mxDestroyArray(T);
    engEvalString(ep, "close;");
    engClose(ep);
    return EXIT_SUCCESS;

}
笔记:具体可以在matlab的帮助里查看具体函数的说明。


C程序调用matlab生成的dll

此方法不需要完全的matlab,只需要有matlab环境即可
需要matlab完成的功能做成一个matlab函数,然后利用mcc命令编译,得到h、dll、lib等文件,在C工程中只需加入上述文件即可

在matlab命令行中输入

mcc -B csharedlib:showBER showBER.m

c++时用cpplib.

cpplib Used for building a C++ shared library. 
 csharedlib Used for building a C shared library. 
相比  mcc -W cpplib:multi2 -T link:lib  multi2.m -d E:\matlab_work\QPTEST\QPMAT命令要简化很多。

matlab新建m文件,利用mcc命令编译。

编译后,有需要的.h.dll.lib文件
注:并不是所有的函数都可以被编译,好像神经网络就不能编译,matlab禁止

然后把生成的文件添加到工程中去。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值