天天看點

方法檔案Matlab調用動态連結庫

在寫這篇文章之前,xxx已寫過了幾篇關于改方法檔案主題的文章,想要了解的朋友可以去翻一下之前的文章

    版權所有,載轉請注明出處:http://guangboo.org/2013/05/02/matlab-dll-file

    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;
end

buf = 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;
    end
end

if length(mac_buffer) > 32
    code = mac_buffer(1:32);
else
    code = mac_buffer;
end
end
           

    調用方法:

>> 
>> get_mac_id()

ans =

3F5E5DB9083770DA154D15A55431229C

>>
           

文章結束給大家分享下程式員的一些笑話語錄: 女人篇

  有的女人就是Windows雖然很優秀,但是安全隐患太大。

  有的女人就是MFC她條件很好,然而不是誰都能玩的起。

  有的女人就是C#長的很漂亮,但是家務活不行。

  有的女人就是C++,她會默默的為你做很多的事情。

  有的女人就是彙編雖然很麻煩,但是有的時候還得求它。

  有的女人就是SQL,她會為你的發展帶來莫大的幫助。