で、色々と検討した結果、ResEditを使うと、VisualStudioライクなRAD環境で
リソース生成が出来て、且つ、これをリソースDLLに変換できることが分かりました。
ってことで、なでしこのGUI用DLLを作成し、ここから上記のリソースDLLを読み込んで
やれば、なんとかなりそうかなあ…。ただ、この方法にはいくつか問題がありまして…
・リソースDLLと同時に、各リソース(ボタンとか、テキストエリアとか)のIDを定義した
ヘッダファイルを同時に生成し、これをなでしこ用DLLで読み込んだ上でなでしこ側の
スクリプトと共有しないといけない。
・DLL側でGUIを生成したとしても、おそらくWin32のメッセージ処理用キューは
なでしこ(gnako)が持っているメッセージキューと同じになる。これを回避するために
なでしこ用DLL内でスレッドを生成して、そこでメッセージを受ける様にすれば、
「母艦」のメッセージとは区別できるが、メインスレッド(つまりなでしこ本体)との
通信方法は考える必要がある。
・gnakoの場合、立ち上げた時点で「母艦」フォームが表示されてしまっていて、
これを消すとgnako自体消えてしまいそうな気がする。
上記ResEditでリソースを作る方法以外にも、Tcl/Tkを用いてなでしこ/Tkみたいな
ラッパーを作る、wxWidgetsのラッパー、Qtなどなど色々考えたけどやっぱり母艦が
自動で生成されていることで相性がイマイチ。vnakoの方は重そうなので、そもそも
却下、GUI(フォーム)が生成されないcnakoなら…と思ったけど、コマンドラインの
DOS窓が消せない…ってことでいずれも破綻しました( ̄□ ̄;。う~む。
ってこでなでしこのGUI環境をいじる別の方法を考えた分けですが、可能性としては
以下の二つ。
・nako.dllにはインタプリタ本体も入ってそうなので、自分でwnako.exeみたいなのを
作って、無理やりResEdit+リソースDLLに対応してみる。
・Win32は諦めて、別の汎用GUI的なものを目指す。
自分でexe作るのも面倒ですし、そもそもインタープリタ部の使い方も説明はない
ため破綻しそう…ってことで後者を考えます。より汎用的ってことで、ローカル
WEBサーバを用いたブラウザ上でのGUIとの連携を考えることにします。
2014年11月24日月曜日
2014年11月3日月曜日
【なでしこ】Win32APIを使ったGUI(案) その1
なでしこには「積み木デザイナー」と言うRADツールが付いてるんですが、
これはあくまでちょっとしたGUIプログラムを作るためのもの。複雑な、
GUIのパーツがイッパイ付いてるものを作ると、それを読み込むだけで
「積み木デザイナー」が重くなり、ロードされるのに結構時間がかかり
ます。
なでしこのGUI部分は\lib以下の「gnako.nako」「windows.nako」がその定義。
windows.nakoがWin32APIのラッパーで、gnako.nakoにはそれらを使った
なでしこの関数、グループなどの定義があります。
このやり方でも全く問題ないんですが…
・gnako.nakoに定義されたグループや関数のコールは、なでしこベースに
なるので結構遅い(Win32APIをコールするより、なでしこのコールが
入る分、一段遅い)
・windows.nakoのラッパーに定義されているメッセージ定数は、グローバル
として定義されているので、イッパイメモリ食ってる。
・積み木デザイナーは「簡易」RADツールなので、複雑なものは作れない。
ってことで、もうちょっと複雑なGUIアプリを、実行速度も考慮しながら
作れる様に考えます。
これはあくまでちょっとしたGUIプログラムを作るためのもの。複雑な、
GUIのパーツがイッパイ付いてるものを作ると、それを読み込むだけで
「積み木デザイナー」が重くなり、ロードされるのに結構時間がかかり
ます。
なでしこのGUI部分は\lib以下の「gnako.nako」「windows.nako」がその定義。
windows.nakoがWin32APIのラッパーで、gnako.nakoにはそれらを使った
なでしこの関数、グループなどの定義があります。
このやり方でも全く問題ないんですが…
・gnako.nakoに定義されたグループや関数のコールは、なでしこベースに
なるので結構遅い(Win32APIをコールするより、なでしこのコールが
入る分、一段遅い)
・windows.nakoのラッパーに定義されているメッセージ定数は、グローバル
として定義されているので、イッパイメモリ食ってる。
・積み木デザイナーは「簡易」RADツールなので、複雑なものは作れない。
ってことで、もうちょっと複雑なGUIアプリを、実行速度も考慮しながら
作れる様に考えます。
登録:
コメント (Atom)