2017-10-06 15 views
0

TCLをC++で拡張していますが、コマンドを削除しようとすると、コマンドの作成時に指定されたTcl_CmdDeleteProcが呼び出されます。 Tcl_CmdDeleteProcが呼び出されると、クライアントデータのみがTcl_CmdDeleteProcに供給されます。私は、Tcl_CmdDeleteProcで破壊されるコマンドの名前を知りたいのですが、これは可能ですか?TCL削除するコマンドの名前を取得する

答えて

0

これは可能ですが、少し難しいことです。

コマンドのdeleteコールバックを使用している場合は、まずそれを作成しておく必要があります(他の人が作成したコマンドの削除コールバックを挿入すると非常に悪いフォームです)。 clientDataは実際にあなたがコントロールする構造体へのポインタになります。コマンドを作成したときに得たTcl_Commandトークンをどこかの構造体に置くと、コマンドが削除されたときにそれを釣り上げて、Tcl_GetCommandNameまたはTcl_GetCommandFullNameと一緒に使用して、コマンドの現在の名前を取得できます。 (削除コールバックは、コマンドにまだ名前がついているところにあります)

非常に注意してください! deleteコールバックは、コマンドが実際に部分的にしか存在しないときに呼び出されます。注意しないとクラッシュを引き起こす可能性があります。コールバックからコマンドを呼び出したり、名前を変更したり、コマンドを削除したりしないでください。おそらくコマンドのトレースを設定して、名前の変更を通知する方がよいでしょう。 (これは、名前の変更や制御できないコマンドの削除について調べるためのメカニズムでもあります)。これは、これらのトレースがわずかに早く発生するためです。

関連する問題