1. 程式人生 > >matlab呼叫VC++生成的DLL

matlab呼叫VC++生成的DLL

matlab是一種指令碼語言,執行效率肯定沒有C語言那樣高效,當然matlab支援呼叫由C語言生成的.dll動態連結庫,從而可以達到matlab與C語言混合便宜的效果。

 注意:我使用的平臺是matlab2016a與vs2015

1、新建一個空專案

2、分別新建一個H檔案和一個C檔案,結構目錄如下圖:

我們來寫一個測試程式,其中原始檔和標頭檔案如下所示:

// TestDll.h

#ifndef __DSP_H__
#define __DSP_H__
#ifdef __cplusplus
extern "C" {
#endif
#define API_DEC __declspec(dllexport)
API_DEC int add(int a, int b);
#ifdef __cplusplus
}
#endif
#endif  //__DSP_H__


//TestDll.cpp

#include"TestDll.h"
#pragma warning(disable : 4996)  
int add(int a, int b)
{
    return a + b;
}

注意:matlab只能呼叫C語言,所以如果檢測到為C++編寫的函式會自動變成C語言的輸出;巨集:API_DEC的作用是產生.dll檔案的固有寫法,是將函式符號匯出,如果你希望別人通過.dll檔案呼叫你寫的程式,在函式宣告的時候必須加上__declspec(dllexport);C檔案中是不需要main函式的。

 3、依據matlab位數(32位(X86),64位(X64)),配置輸出檔案,如下圖:

注意:平臺配置一定為X64,配置型別輸出為.dll

4、點選生成就可以產生TestDll.dll

5、將.dll檔案和.h檔案一起放到matlab檔案目錄下面(與呼叫的地方屬於同一級目錄)

6、  matlab上操作方法:

[notfound,warnings] = loadlibrary('TestDll','TestDll.h'); %載入.dll庫
calllib('TestDll', 'add',1,2); %呼叫動態庫裡面的函式
%此時就會輸出正確的結果
      ans =
          3
注意1:loadlibrary載入完.dll庫可以使用libfunctions dsp -full檢視具體函式
>> libfunctions dsp -full  
類 lib.dsp 的方法:
int32 add(int32, int32)
注意2:unloadlibrary TestDll  會解除安裝.dll 檔案,釋放記憶體

PS:這是我寫的第一篇部落格,只希望與大家共同進步,20180622