TCL获取要删除的命令的名称

时间:2017-10-06 11:49:54

标签: tcl

我正在使用C ++扩展TCL,我的理解是当一个命令即将被删除时,将调用在创建命令时指定的Tcl_CmdDeleteProc。但是只有客户端数据在调用时才会提供给Tcl_CmdDeleteProc。我想知道要在Tcl_CmdDeleteProc中销毁的命令的名称,这可能吗?

1 个答案:

答案 0 :(得分:0)

这是可能的,但你必须对它有点棘手。

如果您在命令的删除回调中,这几乎意味着您必须首先创建它(这是为其他人创建的命令插入删除回调的非常糟糕的形式)这意味着clientData实际上可以指向您控制的结构。如果将Tcl_Command标记(在创建命令时得到的标记)放入某个结构中,可以在删除命令时将其删除,并将其与Tcl_GetCommandNameTcl_GetCommandFullName一起使用获取命令的当前名称。 (当命令仍有名称BTW时,删除回调就会出现。)

要非常小心!当命令实际上只是部分存在时,会调用删除回调。如果你不小心,它可能会引发崩溃。您可能不应该从回调中调用该命令,或重命名该命令,或将其删除。最好在命令上设置跟踪,以便收到名称更改的通知。 (这也是一种机制,您可以使用它来查找名称更改和删除您无法控制的命令。)这是因为这些跟踪稍早发生,但仍然在命令被标记为死亡时。