Tcl 作为一种脚本语言,有其优点,因而在C/C++程序中加入执行Tcl脚本的能力,可以提供脚本。 Tcl 作为一种脚本语言,终有其局限性。比如速度和某些功能。在Tcl中调用 C/C++ 使得 Tcl 可以扩展。
Tcl/Tk 和 C/C++ 的关系可以概括为三种情况:
在C/C++程序里面执行 Tcl 语句。 (Tcl Interpreter) 在 Tcl 中调用 C/C++ 实现的功能。 (Tcl Package) C/C++程序本身是基于 Tcl/Tk 的程序。(Big Wish)
在C/C++程序里面执行 Tcl 语句 (Tcl Interpreter)
Adding Tcl/Tk to a C application
由于Tcl语言是解释器执行语言,可以想象问题的关键是知道解释器对象和要执行得Tcl语句。 Tcl解释器(Tcl Interpreter)的创建和管理
// 创建一个解释器 Tcl_Interp *interp = Tcl_CreateInterp();
// 执行"init.tcl"进行初始化 if ( Tcl_Init( interp ) != TCL_OK ) { // Error }
if(Tcl_InterpDeleted(interp) != 0){ // 解释器 已经被删除了 }
// 通过解释器来使用Tcl const char *script = "set t 3 ; puts $t"; Tcl_Eval(interp,script ); // 删除这个解释器 Tcl_DeleteInterp(interp);
Tcl解释器中命令的执行
/* 执行一段命令, 命令内容保存在 objPtr 中 */ int Tcl_EvalObjEx(Tcl_Interp *interp, Tcl_Obj *objPtr, int flags); /************************************************ * 第一次执行时,命令会被编译成字节码 ***********************************************/
/* 执行一个文件, 相对于 source 语句 */ int Tcl_EvalFile(Tcl_Interp *interp, const char *fileName);
/* 执行一段命令, 命令内容保存在字符串中 */ int Tcl_Eval(Tcl_Interp *interp, const char *script ); int Tcl_EvalEx(Tcl_Interp *interp, const char *script, int numBytes, int flags); /************************************************ * 直接解析执行,不会编译成字节码 ***********************************************/ /* 执行一条命令 */ int Tcl_EvalObjv(Tcl_Interp *interp, int objc, Tcl_Obj **objv, int flags);
在 Tcl 中调用 C/C++ 实现的功能 (Tcl Package)
这个常用于扩展包。
在Tcl中读入编译好的C/C++程序模块(.so 文件或者.dll文件)。
Tcl 通过命令 load 加载编译好的程序模块
load filename.so pkgName # Tcl解释器将会调用C/C++ 模块种特定的函数(pkgName_Init/pkgName_SafeInit) 作为程序入口。 # 该入口函数通常用来添加Tcl命令。
# 默认是读入当前的解释器。也可以指定解释器如下 load filename.so pkgName interp
C/C++
/************************************************ * 以下两者之一是函数原型 * 后者用于safe intepreter *************************************************/ int pkgName_Init(Tcl_Interp *interp); int pkgName_SafeInit(Tcl_Interp *interp);
//e.g. int pkgName_Init(Tcl_Interp *interp){
}
关于如何在C中创建新的Tcl命令,稍后介绍。
C/C++程序本身是基于 Tcl/Tk 的程序
这种程序的好处是,在拥有C的强大计算能力的同时,提供给用户一个交互式界面。 如果加上Tk,还可以实现GUI。这样的程序有时也被称作 //bigwish//
Hello World 程序。执行起来就像是一个Tcl Shell。
#include <tk.h> #include <tcl.h> #include <iostream>
typedef int Tcl_AppInitProc(Tcl_Interp *interp);
-
六六分期app的软件客服如何联系?不知道吗?加qq群【895510560】即可!标题:六六分期
阅读:19212|2023-10-27
-
今天小编告诉大家如何处理win10系统火狐flash插件总是崩溃的问题,可能很多用户都不知
阅读:9994|2022-11-06
-
今天小编告诉大家如何对win10系统删除桌面回收站图标进行设置,可能很多用户都不知道
阅读:8331|2022-11-06
-
今天小编告诉大家如何对win10系统电脑设置节能降温的设置方法,想必大家都遇到过需要
阅读:8699|2022-11-06
-
我们在使用xp系统的过程中,经常需要对xp系统无线网络安装向导设置进行设置,可能很多
阅读:8642|2022-11-06
-
今天小编告诉大家如何处理win7系统玩cf老是与主机连接不稳定的问题,可能很多用户都不
阅读:9663|2022-11-06
-
电脑对日常生活的重要性小编就不多说了,可是一旦碰到win7系统设置cf烟雾头的问题,很
阅读:8627|2022-11-06
-
我们在日常使用电脑的时候,有的小伙伴们可能在打开应用的时候会遇见提示应用程序无法
阅读:8003|2022-11-06
-
今天小编告诉大家如何对win7系统打开vcf文件进行设置,可能很多用户都不知道怎么对win
阅读:8660|2022-11-06
-
今天小编告诉大家如何对win10系统s4开启USB调试模式进行设置,可能很多用户都不知道怎
阅读:7537|2022-11-06
|
请发表评论