要將TCL Library成功build,按照底下幾個步驟,以Windows為例:
- 準備好TCL 8.6.2 32bit的source code
- 執行.\tcl8.6.2\win底下的「vsvars32.bat」,確保環境為32bit
- 再利用console切換到「.\tcl8.6.2\win」底下,執行
- nmake -f makefile.vc
- 這邊主要是看有哪些選項設定可以用的,可以跳過
- 然後輸入底下就可以
- 產生Release - nmake -f makefile.vc release
- 產生Debug - nmake -f makefile.vc release OPT=symbols
- 關於使用,以Release來說,他產生的library名稱為「tcl86t.lib」,直接在VC++環境裡頭Link就好了
要將TCL包進C/C++裡頭,寫一個TCL的延伸,按照底下幾個步驟:
- 開一個DLL專案,將剛剛的library給Link進來
- 因為是DLL所以這樣宣告主要的function載入點:
- EXTERN int Hello_Init(Tcl_Interp * interp);
- 這個EXTERN是TCL內建的define,後面是你自己的名稱
- 為這個函式加入TCL元素,這個意思是,先Initial TCL環境,再確認版本,最後加入TCL command
- 這邊加入的是"SayHello",意思是說,當進入TCL,畫面上輸入"SayHello"時,會去呼叫Hello_Cmd做出反應
- if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL)
return TCL_ERROR;
if (Tcl_PkgProvide(interp, "hello", VERSION) != TCL_OK)
return TCL_ERROR;
Tcl_CreateObjCommand(interp, "SayHello", Hello_Cmd, NULL, NULL);
return TCL_OK; - 然後我們去寫Hello_Cmd function,這個Hello_Cmd必須遵照TCL的語法,這裡意思是說去顯示Hello, World在螢幕上:
- static int Hello_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
- 我們的NuTCL-RM就是這樣擴充下去,分出很多命令,底下又帶子命令,完全是自己定義的。
Tcl_SetObjResult(interp, Tcl_NewStringObj("Hello, World!", -1));
return TCL_OK;
}
沒有留言:
張貼留言