From: aito@...5sun.yz.yamagata-u.ac.jp Date: 1997-11-17T09:04:00+09:00 Subject: [ruby-list:5305] Re: Win32 用の Ruby での tk の使用 あ伊藤です. In article <346D74140.281C.tota@os.rim.or.jp>, Tomoaki Takebayashi writes: > > :私は通常Windowsを使用しているのですが、Windows上で動くrubyはtk関係の > > :クラスの使用ができるのでしょうか。 > > > > 残念ながらできません. そのうちなんとかと思ってるんだけど. > そうですか。残念です。 > rubyでプロトタイプを書いて、C++で書き直すといったことをやってみたかったん > です。 私も,これができないために,心ならずも :-) tcl/tk でプログラム を書いています.ruby でも,tcl/tk を直接リンクする拡張が正式 公開されれば,Windows への移植は比較的簡単ですよね. > なんか質問する個所が違うので、恐縮なんですがひとつ教えてください。 > tkって、本家Tcl/tk、Ptyhon/tk、Perl/tkなどの実装を知ってますが、簡単に > 追加ライブラリとして組み込むことができるものなんでしょうか。 > コードを見たことがないので、結構不思議なんです。 tk 単独ではリンクできません.tcl/tk をそのままリンクします. ボタンを押したら "Hello" と表示するプログラムは,例えばこんな 感じです. #include #include int say_hello(ClientData data, Tcl_Interp *interp, int argc, char *argv[]) { printf("Hello\n"); return TCL_OK; } int Tcl_AppInit(Tcl_Interp *interp) { Tcl_Init(interp); Tk_Init(interp); Tcl_StaticPackage(interp, "Tk", Tk_Init, (Tcl_PackageInitProc *) NULL); Tcl_CreateCommand(interp,"say_hello",say_hello,NULL,NULL); Tcl_Eval(interp,"button .b -text {PUSH} -command say_hello\npack .b"); return TCL_OK; } main(int argc, char *argv[]) { Tk_Main(argc,argv,Tcl_AppInit); } 自前でコマンドを定義し,それを呼び出す tcl のプログラムを Tcl_Eval (または Tcl_EvalFile)で評価するというのが一般的だと思います. # ruby の拡張も簡単なので挑戦してみてくださいね :-) --_ ITO Akinori at YAMAGATA UNIVERSITY 伊藤 彰則 山形 大学