我正在使用C ++扩展TCL,我的理解是当一个命令即将被删除时,将调用在创建命令时指定的Tcl_CmdDeleteProc。但是只有客户端数据在调用时才会提供给Tcl_CmdDeleteProc。我想知道要在Tcl_CmdDeleteProc中销毁的命令的名称,这可能吗?
答案 0 :(得分:0)
这是可能的,但你必须对它有点棘手。
如果您在命令的删除回调中,这几乎意味着您必须首先创建它(这是为其他人创建的命令插入删除回调的非常糟糕的形式)这意味着clientData
实际上可以指向您控制的结构。如果将Tcl_Command
标记(在创建命令时得到的标记)放入某个结构中,可以在删除命令时将其删除,并将其与Tcl_GetCommandName
或Tcl_GetCommandFullName
一起使用获取命令的当前名称。 (当命令仍有名称BTW时,删除回调就会出现。)
要非常小心!当命令实际上只是部分存在时,会调用删除回调。如果你不小心,它可能会引发崩溃。您可能不应该从回调中调用该命令,或重命名该命令,或将其删除。最好在命令上设置跟踪,以便收到名称更改的通知。 (这也是一种机制,您可以使用它来查找名称更改和删除您无法控制的命令。)这是因为这些跟踪稍早发生,但仍然在命令被标记为死亡时。