当前位置: 首页 > 知识库问答 >
问题:

向SWIG生成的Tcl模块添加自定义Tcl过程?

黄昊英
2023-03-14

我正在尝试使用SWIG将旧的Tcl接口替换为C。下面是一个示例类:

class test {
  std::string str;
 public:
  test(const char * s):str(s) {}
  void print() const {std::cout << str << std::endl;}
};

这是使用它的标准方法:

load ./example.so example
test s "this is a test string"
s print

但我想保留旧界面的简单性,它不使用”。我发现我可以做如下事情:

load ./example.so example

proc TEST {args} { test [lindex $args 0] [lrange $args 1 end] }

TEST s2 this is another test string
s2 print

它看起来很简单,工作完美,但是,当然,我不能在用户脚本中使用proc定义。我不确定还能把它放在哪里。有办法把它放在. i文件中吗?

共有1个答案

鲁靖
2023-03-14

我想你可以把这个放进你的。i文件:

%init %{
    Tcl_Eval(interp, "proc TEST {args} { ... }");
%}

这将插入对Tcl_Eval的调用(这将使过程)到您的模块的初始化函数中,并且只要interp上下文在那里可用(警告!检查这个!)然后你会得到一切很好的打包。

如果你有很多代码,考虑调用Tcl_EvalFile来代替,或者调用Tcl代码,它将source脚本代码(如果你需要复杂的脚本来定位要读取的文件,这是必要的)。

 类似资料:
  • 我正在使用SWIG生成一个围绕freetype的C包装。我的目标是为WinRT生成一个带有C接口的freetype DLL,该接口将在Windows Phone 8上运行,然而,生成的C包装似乎依赖于Tcl。由于我不需要Tcl绑定,而且WinRT默认情况下不提供Tcl,我想知道是否可以以某种方式关闭Tcl依赖项。我正在使用Visual Studio 2012编译生成的代码。 我查阅了文档,只找到了

  • Tcl

    Tcl(最早称为“工具命令语言”"Tool Command Language",但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种 脚本语言。由John Ousterhout创建。 TCL很好学,功能很强大。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。TCL念作“踢叩”(tickle)。Tcl的特性包括: 任何东西都是一条命令,包括语法结构(for,if等)。 任何事物都

  • 虽然Blockly定义了许多标准块,但大多数应用程序需要定义和实现至少一些域相关块。 块由三个部分组成: 块定义对象:定义块的外观和行为,包括文本,颜色,字段和连接。 工具箱参考:工具箱XML中对块类型的引用,因此用户可以将其添加到工作区。 生成器函数:生成此块的代码字符串。它是用JavaScript编写的,即使目标语言不是JavaScript,甚至是用于Android端的Blockly。 块定义

  • 我用jmod工具创建了一个简单的文件,如下所示 接下来,我试图通过运行以下命令在该模块中执行一个类: 这导致了以下例外情况: 如果我只是将我的目录(我用来创建JMOD文件)设置为modulepath,那么一切都正常工作。 在modulepath上通常不可能有文件吗?如果是这样的话,有什么原因吗?

  • 我正在使用swig 4.0.2生成一个供tcl使用的包。 消息来源。i文件包含很多类和生成的_wrap。cpp文件包含了我所期望的所有类及其方法,并且一切编译正常,没有任何警告。 但是,对于至少一个类,当我从tcl脚本调用实例上的方法时,我会收到一个运行时错误,说该方法不存在。该错误还转储了该类的所有可用方法。我试图调用的方法以及其他一些方法不存在于该列表中。 虽然缺少哪些方法是一致的,但列表中似

  • Visual Tcl 是一款完全免费的高质量 TCL 语言开发环境,适用于各主流平台。