2017-10-06 60 views
0

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

回答

0

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

如果你在一个命令的删除回调中,这很大程度上意味着你必须首先创建它(这对于其他人创建的命令插入删除回调是非常糟糕的形式),这意味着clientData确实可以是指向您控制的结构的指针。如果将Tcl_Command标记(在创建命令时获得的标记)放入结构的某处,可以在删除该命令时使用该标记,并使用Tcl_GetCommandNameTcl_GetCommandFullName获取命令的当前名称。 (删除回调在命令仍然有一个名称时,BTW。)

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