zoukankan      html  css  js  c++  java
  • vs2008中调用matlab生成的dll

    vs2008中调用matlab生成的dll

    matlab版本为:matlab7.11.0(R2010b)
    vs2008

    1.在matlab中生成dll

    在m文件中实现如下功能:
    获得N个魔方矩阵的秩。m文件的内容如下:
    function r = mrank(n)

    r = zeros(n,1);
    for k=1:n
        r(k) = rank(magic(k));
    end

    将上述内容保存为:mrank.m


    在matlab的command 窗口键入:
    >> mcc -B csharedlib:mrank mrank.m %该命令将在后面做说明

    在matlab7.0中执行上述命令后生成下面几个文件:
    mrank.exp    mrank.exports   mrank.h   mrank.lib  mrank.c     mrank.dll   

    在vs2008中使用m文件的函数功能。
    首先配置vs2008的环境
    1.工具——> 选项——>项目和解决方案——>VC++目录
    (1) 选择“可执行文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\bin\win32(注意:当前的Mathlab安装在C:\Program Files下面)
    (2)选择“包含文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\include
    (3)选择“引用文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib
    (4)选择“库文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft
    上述环境只需要配置一次

    对于每一个工程,做下面的设置
    项目——>属性——>连接器——>输入
    选择:附加依赖项:添加:
    libmex.lib
    libmx.lib
    libmat.lib
    mclmcrrt.lib

    将mrank.h  mrank.lib  mrank.dll拷贝到当前目录下
    cpp文件中中的内容如下:
    #include "stdafx.h"
    #include<stdlib.h>
    #include"matrix.h"
    #include"mrank.h"
    #include "mclmcrrt.h"
    #pragma comment(lib,"mrank.lib")

    int main()
    {
      mxArray *N(NULL),*R(NULL);
     int n =12;

     mrankInitialize();//初始化动态链接库
     N = mxCreateDoubleScalar(n);//用n来初始化生成的数组,其实标量就是一个1*1的数组
     mlfMrank(1,&R,N);//执行m文件的主要功能
     
     size_t num = mxGetM(R);//R的行的个数
     double *res = new double[num];
     memset(res,0,sizeof(double)*num);

     memcpy(res,mxGetPr(R),sizeof(double)*num);

     for(int i=0;i<num;++i)
      printf("%f\n",res[i]);

     delete[] res;
     mxDestroyArray(N);
     mxDestroyArray(R);
     
     mrankTerminate();//终止动态数据连接
    return 0;
    }

    上述cpp文件使用了Matlab编译m文件生成的dll,在cpp中通过mxArray这个数据结构来和dll中的方法进行信息交换。
    这样就在cpp中调用了matlab中的m文件实现的方法。

    mcc命令说明:
    http://www.cnblogs.com/juneja/archive/2008/10/31/1323423.html

  • 相关阅读:
    python os.open()和open()
    巨坑:浏览器在短时间内对于同一个请求的处理,会先等待上一个请求完成后,再处理下一个请求,导致在测试异步时误导代码有问题。
    写在开始
    租房小记
    小聚随笔
    由游戏想。(补发)
    对于devOps的一些理解(补发)
    写在2020-01-30(补发)
    杂谈
    如何对抗无意识状态(补发)
  • 原文地址:https://www.cnblogs.com/CBDoctor/p/2839943.html
Copyright © 2011-2022 走看看