如何在c代码中使用tcl api

2023-12-15

我想在另一个“c”代码文件中使用我的 tcl 代码的一些功能(API)。但我不知道如何做到这一点,特别是如何链接它们。为此,我采用了一个非常简单的 tcl 代码,其中包含一个 API,该 API 将两个数字相加并打印总和。谁能告诉我如何调用这个 tcl 代码来获得总和。我如何编写一个 C 包装器来调用这个 tcl 代码。下面是我正在使用的示例 tcl 程序:

#!/usr/bin/env tclsh8.5
proc add_two_nos { } {

set a 10

  set b 20

  set c [expr { $a + $b } ]

  puts " c is $c ......."

}

要从 C 代码评估脚本,请使用Tcl_Eval()或其近亲之一。为了使用该 API,您需要链接 Tcl 库,初始化Tcl库 and 创建一个解释器保存执行上下文。另外,您确实应该做一些工作来检索结果并将其打印出来(打印脚本错误尤其重要,因为这有助于lot并进行调试!)

因此,你会得到这样的结果:

#include <tcl.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    Tcl_Interp *interp;
    int code;
    char *result;

    Tcl_FindExecutable(argv[0]);
    interp = Tcl_CreateInterp();
    code = Tcl_Eval(interp, "source myscript.tcl; add_two_nos");

    /* Retrieve the result... */
    result = Tcl_GetString(Tcl_GetObjResult(interp));

    /* Check for error! If an error, message is result. */
    if (code == TCL_ERROR) {
        fprintf(stderr, "ERROR in script: %s\n", result);
        exit(1);
    }

    /* Print (normal) result if non-empty; we'll skip handling encodings for now */
    if (strlen(result)) {
        printf("%s\n", result);
    }

    /* Clean up */
    Tcl_DeleteInterp(interp);
    exit(0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在c代码中使用tcl api 的相关文章

  • 如何在Tcl中安装软件包?

    我正在尝试安装critlib在我的机器上 http equi4 com critlib http equi4 com critlib 这样我就可以在 Tcl 中动态创建 zip 文件 问题是我不知道如何安装 Tcl 软件包 您是否有放置文件
  • Strawberry Perl v5.30.0 无法安装 Tcl (Windows 10)

    我从下载并安装了草莓 perl 5 30 0 1 64bit msi草莓perl com http strawberryperl com 在我的 Windows 10 上并尝试使用 cpan 安装 Tcl 模块 但由于缺少 tclsh 而失
  • 如何在 tcl 中使用 split 删除不需要的字符

    这是一个例子 Interface IP Address OK Method Status Protocol FastEthernet0 0 unassigned YES unset administratively down down Fa
  • 将 bash 数组传递给 Expect 脚本

    我有一个 bash 脚本 它像这样调用 Expect 脚本 SCRIPTS DIRECTORY my expect script sh my bash array 看起来我可以传递一个变量并使用它 对于这个例子 变量似乎是在 lindex
  • 如何使用 Swig 将枚举值从 TCL 脚本传递到 C++ 类

    我正在使用以下代码 1 文件 example i module example Put header files here or function declarations like below include example h incl
  • 生成和执行之间有什么区别?

    我正在学习编写 TCL 期望 脚本 我注意到一些示例显示了如何使用 spawn 而其他示例则显示了命令 exec 我尝试谷歌搜索 但找不到有什么区别 假设我在一个很长的期望脚本中间调用 exec 我会期望发生什么 spawn is an e
  • 将其放入 TCL 正则表达式中的转义字符串

    I use Expect作为测试框架并编写一些辅助函数来简化匹配模式的键入expect命令 因此 我寻找将任何字符串转换为字符串的函数 其中所有特殊的正则表达式语法都被转义 例如 和其他字符 这样我就可以将任何字符串放入正则表达式中 而不必
  • PYTHON 的 Tcl 文件解析器

    我有一个 tcl 文件 是否有任何解析器可以直接从 tcl 文件中提取数据 我不想使用 REGEX 来完成此任务 pyparsing 可以解决这个问题吗 我正在使用Python 2 7 tcl 文件不是数据文件 它们是用 Tcl 编程语言编
  • Tcl.h:没有这样的文件或目录

    我正在尝试将一些代码从 Solaris 机器移植到 Linux 特别是 Redhat 机器上 代码编译没有问题 并且在 Solaris 机器上运行也没有问题 然而 在 Linux 上重新编译时 我遇到了 tcl h 的问题 编译器告诉我 e
  • 按值对 Tcl 字典排序

    我想知道 Tcl 中是否有一种按值对 dict 进行排序的优雅方法 假设我有以下字典 set d1 dict create k1 10 k2 89 k3 1 k4 15 k5 20 Results in dict of form k1 gt
  • tcl 暂停并等待按键继续

    我正在 tcl 中寻找一种方法来暂停脚本 例如在使用 puts 进行一些输出之后 并等待用户按下按键 然后再继续输出剩余的文本 你只需使用gets从标准输入读取 proc pause message Hit Enter to continu
  • 如何在tcl中搜索数字即进程ID并杀死进程ID

    我尝试搜索存储在变量 say 缓冲区中的进程 id i e 6762 nohup tcpdump ni eth0 s0 2 gt 1 null 1 6762 You have new mail in var mail root 如果匹配的话
  • 打印大型 TCL 项目的源层次结构

    因此 我正在处理一个大型 TCL 项目 并且认为构建一个树状视图来显示文件在项目中的来源方式会很酷 我修改了源命令以执行以下操作 rename source real source proc source args set file han
  • 如何让proc更有效?

    有一个顶点集合 x1 y1 x2 y2 xn yn 我想改变这些坐标的中心 所以我尝试 proc changeCenter vertices X Y set myList list foreach element vertices lapp
  • 如何在 {expect} 脚本中创建“循环”语句?

    假设是 这是脚本 usr bin expect set a test 我想在这个脚本中创建一个循环 以便它可以打印值 a 前面有一个基于循环的数字 所以如果我想让它循环3次 最终产品将变成 1 test 2 test 3 test 您可以使
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • TCL 中的 if 语句

    我对以下代码的 tcl 中的 if 语句有疑问 if number 1 name hello number 0 name yes do something here 上面的代码是有效的 但是如果我这样写 if number 1 name h
  • 带 Expect 的 Telnet 自动化:身份验证速度慢?

    我正在使用 Telnet 向 Mikrotik 路由器发送命令 telnet 192 168 100 100 l admin Password pass1234 admin ZYMMA gt interface pppoe server r
  • Tk 框架内的 Chrome 网页

    我想在 Tcl Tk 框架内运行我的 chrome 页面 我必须从 Windows 平台运行我的脚本 到目前为止 我可以使用 start 命令启动 chrome 页面 如何将我的 chrome 页面包含在 Tk 窗口内 eval exec
  • 使用 Expect 自动化 xterm

    我正在尝试自动化xterm窗口使用Expect 虽然我已经知道Expect无法控制此类 GUI 应用程序 但有一个调整机制解释于探索期待 http shop oreilly com product 9781565920903 do pack

随机推荐