Matlab呼叫動態鏈結庫

2021-08-27 12:03:10 字數 1399 閱讀 2320

matlab的優勢就是矩陣計算,大量的演算法庫等,對於非矩陣計算來說可能就沒有多高的效能和優勢。matlab支援使用c語言和fortan編寫擴充套件,這樣就可以彌補matlab不擅長的部分。有些時候我們需要在matlab中呼叫已有的dll,避免寫c擴充套件。

比如需要在matlab中獲取機器碼,而這個機器碼的獲取方法是現成的,只是這個方法是使用c編寫的,並已經編譯成libhelper.dll檔案

裡。那麼我們就可以這些編譯乙個get_mac_id的函式,來呼叫該dll中的函式get_machine_code的方法。

需要有libhelper.h檔案,該標頭檔案要包含get_machine_code函式的宣告,如:

int __stdcall get_machine_code(char *buf);
libhelper.h標頭檔案是必須的,並且檔名也要和dll檔名一致。然後可以編寫m檔案get_id.m,如下:

function code = get_mac_id()

%getid summary of this function goes here

% detailed explanation goes here

try [notfound,warnings] = loadlibrary('libhelper.dll');

arg = '';

%arg = libpointer('stringptr',buf);

[a, buf2] = calllib('libhelper', 'get_machine_code', arg);

unloadlibrary('libhelper');

catch

code = '';

return;

endbuf = unicode2native(buf2, '');

mac_buffer = repmat('0', 1, 64);

len = length(buf2);

for i=1:len

c = dec2hex(uint8(buf(i)));

if length(c) == 1

mac_buffer(i*2-1:i*2) = ['0' c];

else

mac_buffer(i*2-1:i*2) = c;

endendif length(mac_buffer) > 32

code = mac_buffer(1:32);

else

code = mac_buffer;

endend

呼叫方法:

>> 

>> get_mac_id()

ans =

3f5e5db9083770da154d15a55431229c

>>

方法檔案Matlab呼叫動態鏈結庫

在寫這篇文章之前,已寫過了幾篇關於改方法檔案主題的文章,想要了解的朋友可以去翻一下之前的文章 matlab的勢優就是矩陣計算,量大的演算法庫等,對於非矩陣計算說來可能就沒有多高的效能和勢優。matlab持支應用c語言和fortan編寫擴充套件,這樣就能夠補彌matlab不善於的部份。有些時候我們要需...

呼叫靜態鏈結庫和動態鏈結庫

呼叫靜態鏈結庫 靜態鏈結庫由.h和.lib檔案組成,h檔案在工程中用來宣告,而.lib檔案包含供外界呼叫的函式的原型。vc 6.0中呼叫靜態鏈結庫.lib共3種方法 1.首先使用語句 include lib.h 並將lib.h拷貝到當前工程目錄下 接著對staticlib smp.lib使用語句 p...

呼叫動態鏈結庫(dll)

步驟 1.tools options projects and solutions vc directories分別在包含檔案,庫檔案填加了路徑 這些路徑只告訴編譯器怎麼找檔案,沒有說把那裡面的檔案加入工程.若不設定,編譯報錯 無法開啟 檔案 2.project properties c c gen...