乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      VC調(diào)用Matlab生成的dll文件

       imelee 2017-09-18

      通常在實(shí)現(xiàn)圖像處理的算法時(shí)我們使用Matlab編程,因?yàn)樗哂胸S富的庫(kù)函數(shù)以及操作方便,然而在工程項(xiàng)目中通常使用C/C++語言。如果我們將matlab代碼完全重寫成C++代碼會(huì)很麻煩,最好的辦法是借助matlab與C/C++接口將.m程序轉(zhuǎn)成dll文件!

      一、使用matlab將.m轉(zhuǎn)成dll文件
      1、在命令行中輸入mex -setup
      提示你是否要在本地安裝matlab compilers,然后選擇compiler類型,有matlab自帶的編輯器以及檢測(cè)到的其他編輯器,比如“Microsoft Visual C/C++ version 6.0 in E:\Program Files\Microsoft Visual Studio”,根據(jù)自己實(shí)際情況選擇。

      2、在命令行中輸入mbuild -setup
      這里的選項(xiàng)和上面類似,依次選擇環(huán)境確定。

      3、生成dll文件
      一句命令mcc -W cpplib:add -T link:lib add.m
      前面的add表示生成的dll文件名,后面的add.m顧名思義是.m文件名。生成后會(huì)多出8個(gè)文件,有用的是add.ctf add.dll add.lib add.h4個(gè)文件,據(jù)說新版的Matlab不會(huì)生成.ctf文件。

      二、VC6.0中調(diào)用生成的dll文件
      上面生成的dll文件,我們可以借助VC6.0的Depends工具查看導(dǎo)出函數(shù)名,但是我們要調(diào)用導(dǎo)出函數(shù)必須要知道函數(shù)的形參返回類型等,這里要借助.h文件,它包含了導(dǎo)出函數(shù)的聲明,下面以實(shí)例來講解使用方法:
      1、add.m文件

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

      注意了add函數(shù)有兩個(gè)返回值,可以猜測(cè)一下在C++中是如何處理的;

      2、add.h文件
      截取其中一段關(guān)鍵代碼如下:

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

      實(shí)際上函數(shù)的返回是變相的放到形參中的,依次是輸出參數(shù)個(gè)數(shù),輸出參數(shù),輸入?yún)?shù)。PS 現(xiàn)在做的這個(gè)項(xiàng)目中用戶自定義算法dll使用的規(guī)則和這里類似!

      3、C++中調(diào)用dll文件
      (1)新建空工程,將上面提及的4個(gè)文件放到工程目錄下;
      (2)VC++目錄中包含目錄:matlab 內(nèi)的include目錄
      比如我的是 E:\MATLAB7\extern\include
      (3)VC++目錄中庫(kù)目錄:matlab 內(nèi)的lib目錄
      E:\MATLAB7\extern\lib\win32\microsoft\msvc60,要根據(jù)VC++版本修改!
      (4)工程屬性-》連接-》輸入-》附加依賴項(xiàng)
      輸入:add.lib mclmcrrt.lib mclmcr.lib,第一個(gè)是生成的?;蛘咴陬A(yù)處理中加入下面代碼

      #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);
      
          //輸出參數(shù)個(gè)數(shù),輸出參數(shù),輸入?yún)?shù)。
          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()一定要!

      最后附上實(shí)現(xiàn)代碼(含.m文件和c++程序)點(diǎn)擊下載

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多