it’s created by me in my second year in my uni.
maybe it’s a little defect for the document ,don’t care plz!!! thx..
目前在世面上,大約有二種方法是較常用來擴充Tcl模組的方法,一種是利用Tcl目錄裡, include資料夾裡的.h檔來進行,大部份都只用到tcl.h, 也有tk.h是用來包給tk用的。
今天我要介紹的方法,是利用世面上一個叫做swig的軟體,它神奇之處在於你不必使用太繁複的方法宣告很多tcl.h的資料形態,你只需要以平常寫C的方式,寫出你要用的程式片斷,在底下我以example.c命名,並且寫出一個介面(interface),用來宣告在Tcl底下,Tcl如何來引用我的example.c,我把這個檔案命名為example.i,以下的操作環境為ubuntu 8.04,因為手邊暫時沒有windwos系統,請大家見諒。
Swig官方網站
http://www.swig.org/
/* example.c /
#include <stdio.h>
//寫一個函式來列出99乘法表,有二個引數,第一個是開始的數字,第二個是結束的數字。
void print99(int start,int end){
int i,j; for(i=start;i<=end;i++){
for(j=1;j<=9;j++)
printf(“%d%d=%2d “,i,j,ij);
printf(“\n”);
}
}
/ example.i /
//以下開始大家必須照著它的格式寫,大部份是套用巨集,不過比起我們自己引入tcl.h來撰寫要簡單多了。
%module example
%{
//以下可以把你寫好的函式列在下方,當在swig轉換時,它自動會被置換。
extern void print99(int start,int en);
%}
//上面寫了幾個,下面也要寫幾個。
extern void print99(int start,int en);
//利用swig -tcl指令,可以把example.c包成 example_wrap.c
jerry@jerry-laptop:~/swig$ swig -tcl example.i
//利用超級使用者的身份編譯(sudo->superuser do),gcc是linux內建來編譯c的compiler,-fpic是在建立獨立狀態的code, -c是不進行連結程式碼連結,/opt/ActiveTcl-8.4/include/
是我的Tcl include資料夾的位置。
jerry@jerry-laptop:~/swig$ sudo gcc -fpic -c example.c example_wrap.c -I/opt/ActiveTcl-8.4/include/
//-shared是建立動態連結share library(so),在windows的環境下,稱作dynamic link library(DLL),-o是指定目地檔的檔名。
jerry@jerry-laptop:~/swig$ gcc -shared example.o example_wrap.o -o example.so
//執行tcl
jerry@jerry-laptop:~/TclBin$ sudo ./tclsh
//讀我放置example.so的檔案
% load ~/swig/example.so
//這時候print99在tcl中已經被宣告為一組指令了,後面跨二個引數
//從1印到8
% print99 1 8
11= 1 12= 2 13= 3 14= 4 15= 5 16= 6 17= 7 18= 8 19= 9
21= 2 22= 4 23= 6 24= 8 25=10 26=12 27=14 28=16 29=18
31= 3 32= 6 33= 9 34=12 35=15 36=18 37=21 38=24 39=27
41= 4 42= 8 43=12 44=16 45=20 46=24 47=28 48=32 49=36
51= 5 52=10 53=15 54=20 55=25 56=30 57=35 58=40 59=45
61= 6 62=12 63=18 64=24 65=30 66=36 67=42 68=48 69=54
71= 7 72=14 73=21 74=28 75=35 76=42 77=49 78=56 79=63
81= 8 82=16 83=24 84=32 85=40 86=48 87=56 88=64 89=72
//從4印到6
% print99 4 6
41= 4 42= 8 43=12 44=16 45=20 46=24 47=28 48=32 49=36
51= 5 52=10 53=15 54=20 55=25 56=30 57=35 58=40 59=45
61= 6 62=12 63=18 64=24 65=30 66=36 67=42 68=48 69=54
%
沒有留言:
張貼留言