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