當前位置:編程學習大全網 - 編程語言 - 如何調用matlab生成的dll文件進行編程

如何調用matlab生成的dll文件進行編程

通常在實現圖像處理的算法時我們使用Matlab編程,因為它具有豐富的庫函數以及操作方便,然而在工程項目中通常使用C/C++語言。如果我們將matlab代碼完全重寫成C++代碼會很麻煩,最好的辦法是借助matlab與C/C++接口將.m程序轉成dll文件!

壹、使用matlab將.m轉成dll文件

1、在命令行中輸入mex -setup

提示妳是否要在本地安裝matlab compilers,然後選擇compiler類型,有matlab自帶的編輯器以及檢測到的其他編輯器,比如“Microsoft Visual C/C++ version 6.0 in E:\Program Files\Microsoft Visual Studio”,根據自己實際情況選擇。

2、在命令行中輸入mbuild -setup

這裏的選項和上面類似,依次選擇環境確定。

3、生成dll文件

壹句命令mcc -W cpplib:add -T link:lib add.m

前面的add表示生成的dll文件名,後面的add.m顧名思義是.m文件名。生成後會多出8個文件,有用的是add.ctfadd.dll add.lib add.h4個文件,據說新版的Matlab不會生成.ctf文件。

二、VC6.0中調用生成的dll文件

上面生成的dll文件,我們可以借助VC6.0的Depends工具查看導出函數名,但是我們要調用導出函數必須要知道函數的形參返回類型等,這裏要借助.h文件,它包含了導出函數的聲明,下面以實例來講解使用方法:

1、add.m文件

function [a,b]=add(x,y)

a=2*x+y;

b=3*y;

end

註意了add函數有兩個返回值,可以猜測壹下在C++中是如何處理的;

2、add.h文件

截取其中壹段關鍵代碼如下:

extern void add(int nargout, mwArray& a, mwArray& b

, const mwArray& x, const mwArray& y);

實際上函數的返回是變相的放到形參中的,依次是輸出參數個數,輸出參數,輸入參數。PS 現在做的這個項目中用戶自定義算法dll使用的規則和這裏類似!

3、C++中調用dll文件

(1)新建空工程,將上面提及的4個文件放到工程目錄下;

(2)VC++目錄中包含目錄:matlab 內的include目錄

比如我的是 E:\MATLAB7\extern\include

(3)VC++目錄中庫目錄:matlab 內的lib目錄

E:\MATLAB7\extern\lib\win32\microsoft\msvc60,要根據VC++版本修改!

(4)工程屬性-》連接-》輸入-》附加依賴項

輸入:add.lib mclmcrrt.lib mclmcr.lib,第壹個是生成的。或者在預處理中加入下面代碼

#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);

//輸出參數個數,輸出參數,輸入參數。

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()壹定要!

  • 上一篇:雛鷹杯有哪些比賽
  • 下一篇:求cass信息
  • copyright 2024編程學習大全網