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...