これはまさにTcl/Tkが設計された仕事のように思えます。コールバックでコマンドを登録できる非常に単純な C API があります。コマンドを Tcl プログラムで使用すると、コールバックが呼び出され、Tcl リスト (ネイティブ データ構造) と char* の ARGV スタイル配列の間で引数を変換するメカニズムが提供されます。
この種のラッパーをコマンドライン駆動の C プログラムに簡単に後付けできるように特別に設計されました。インタープリターとのインターフェースとして使用できるその他のさまざまなモードもあり、スクリプト言語としてプログラムに簡単に組み込むことができます。メモリから、利用可能なインターフェースメカニズムは次のとおりです。
- コマンドを Tcl インタープリターに登録する
- Tcl インタープリターをプログラムに組み込み、Tcl を組み込みスクリプト言語として使用します (プログラムへのコマンドとコールバックの登録を含む可能性があります)。
- 全二重パイプを使用してプロセスを生成し、stdin/stdout を介してコマンドを送信します (データが利用可能になったときに呼び出されるイベント ハンドラーをパイプにアタッチすることもできます)。
- fork/exec やソケット経由の接続などの Tcl 固有のメカニズムが少ない。
Ousterhout の著書Tcl and the TK Toolkitは少し古いですが、C API の優れたガイドです。Welch のPractical Programming in Tcl/Tkは、もう 1 つの古典的な Tcl/Tk の本で、より頻繁に更新されています。他にもいくつかの本があり、インターネット上には非常に多くの電子リソースがあります。出発点としては、 Tcl チュートリアル、TK チュートリアル、Tcl アドボカシー サイト(このルートに進むかどうかを判断するために熟読する価値があるかもしれません)、Tcl/Tk Wiki、そしてもちろんStackoverflowがあります。
TK は簡単な GUI を提供し、プログラムを習得するのは非常に簡単です。時間をかけて外観を微調整したり、Tile などのテーマ エンジンを使用したりすると、以前ほど見苦しくなくなります。
Norman Ramseyが (+1) を指摘しているように、単純な C API を使用した別の代替手段はLua です。 どちらにも長所と短所があります。Tcl の主な強みは、シンプルできれいに統合された TK ツールキットと、サードパーティ ライブラリ ( Tixなど)からの優れた成熟したサポート サポートです。Lua の主な強みは、言語がはるかに優れていることですが、標準の GUI ツールキットがないため、UI がうまく統合されていません。Lua は、インタープリターでのスレッド化のサポートも大幅に向上しており、最初からスレッド化のために設計されています。ただし、従来の C/unix アプリケーションをラップしている場合、これが重要な機能になる可能性はほとんどありません。
WXWidgets は TK よりもかなり複雑で、実行時の負担が大きくなりますが、より豊富な機能セットを備えています。
スクリプト作成プロジェクトがより大きなアプリケーションに成長すると考える真の理由がある場合は、Lua を検討することをお勧めします。しかし、大規模な開発プロジェクトになると、PythonやRubyが実行可能な選択肢になり始めます。プロジェクトのラッピングが大きくなるにつれて、C コードベースはプロジェクト全体に占める割合が小さくなり、サードパーティ ライブラリのサポートがより大きな考慮事項になります。
Tcl を使用していて、プロジェクトが独り立ちすることがわかった場合は、Tcl インタープリターを組み込み、ユーザーが独自のスクリプトをフックできるプラグイン API としてアプリケーションを再キャストすることを検討してください。追加の機能はスクリプトとして実行でき、メンテナンスのためにサードパーティに提供される可能性があります。スクリプト言語が組み込まれたシステムの利点の 1 つは、個人的に機能を実装する必要がないことです。スクリプト言語で独自の拡張機能を作成するか、サードパーティに作成を依頼することができます。
SWIG は、ライブラリのラッパーを生成するように設計されています。ヘッダー ファイルを解析し、ネイティブ API をターゲット言語で表示するグルー レイヤーを生成します。それを使用するには、プログラムをライブラリにリファクタリングする必要があります。