2013年7月13日 星期六

scilab 呼叫 share library(Windows DLL)

使用 link & call

a=link("sharelib.dll","dllfunction","c");

o=0;

o=call("dllfunction",arg1,1,"i",arg2,2,"i","out",[length(o) 1],3,"i");

unlink(a);

其中 call 有幾個關鍵須先明瞭

1. 是 "out" 字眼,他是指明當呼叫 DLL 的函數時,等號左邊右邊的變數的分界點,"out" 之前的參數稱作 Righthand side input variables, "out" 之後的參數稱作 Lefthand side output variables.

2. 參數 arg(n) 須擺在當呼叫 DLL 時第幾(m)個參數必須被明確指出, 否則會出現記憶體分配錯誤的情形.(如上例:參數 arg1 當第一個, 參數 arg2 當第2 個, 第3個被當成傳回值且放到等號左邊第一個變數,且記憶體需要[lenghth(o) 1] 個陣列的空間

3. 當作 Lefthandside 的記憶體數量須先自行分配好足夠空間以便容納所傳回的陣列(或變數)

4. scilab 都是call by reference(也就是說它會傳變數的記憶體位址過去給DLL函數)

5. 資料型態共有 4 種: "i" 是 integer, "r" 是 real, "d" 是 double, "c" 是 character 註:

// 當'out'存在時的呼叫方式:

[y1,...,yk] = call("ident",x1,px1,"tx1",...,xn,pxn,"txn","out",[ny1,my1],py1,"ty1",...,[nyl,myl],pyl,"tyl")


沒有留言: