2017-10-06 2 views
0

Je suis en train d'étendre TCL avec C++ et je crois comprendre que lorsqu'une commande est sur le point d'être supprimée, le Tcl_CmdDeleteProc spécifié lors de la création de la commande est appelé. Mais seules les données client sont fournies à Tcl_CmdDeleteProc lors de son appel. Je voudrais savoir le nom de la commande à détruire dans le Tcl_CmdDeleteProc, est-ce possible?TCL obtenir le nom de la commande à supprimer

Répondre

0

C'est possible, mais vous devez être un peu compliqué à ce sujet. Si vous êtes dans le rappel de suppression d'une commande, cela signifie que vous devez l'avoir créé en premier lieu (il est terriblement mauvais d'insérer des rappels de suppression pour les commandes créées par d'autres) et cela signifie que le clientData peut vraiment être un pointeur vers une structure que vous contrôlez. Si vous placez le jeton Tcl_Command (que vous avez obtenu lors de la création de la commande) dans la structure, vous pouvez l'extraire lorsque la commande est supprimée et l'utiliser avec Tcl_GetCommandName ou Tcl_GetCommandFullName pour obtenir le nom actuel de la commande. (Le rappel de suppression arrive à un point où la commande a encore un nom, BTW.)

Soyez très prudent! Le rappel de suppression est appelé à un moment où la commande n'est réellement que partiellement présente; il est possible de déclencher des accidents si vous ne faites pas attention. Vous ne devriez probablement pas appeler la commande à partir du rappel, ou le renommer, ou le supprimer. Il est peut-être préférable de définir une trace sur la commande afin que vous soyez averti des changements de nom. (C'est aussi un mécanisme que vous pouvez utiliser pour connaître les changements de noms et les suppressions de commandes que vous ne contrôlez pas.) C'est parce que ces traces surviennent un peu plus tôt, mais toujours quand la commande est marquée pour la mort.