[過去ログ] SDLスレ (987レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
536: 531 ◆pm4Rr1N8T6 [sage] 04/08/27 18:28 ID:hR9vryWf(3/3) AAS
SDL で対応してるウィンドウシステムはよくわからないんだけど、
SDL_SysWMinfo の定義には
・X11
・Nano-X
・Win32
・RiscOS
があるね。
BeOS とか Amiga とかは最初は無視しといていいかな。
Mac はどうしよう。随分前に調べたんだけど情報を見付けることができなかった。
情報リンク
外部リンク[html]:home.catv.ne.jp
日本語入力プログラミング
外部リンク[html]:www.hmug.org
XmbLookupString() の man (ごめん、UNIX よくわからない)
外部リンク[htm]:www.kumei.ne.jp
IME の操作@猫でもわかるプログラミング
537: sgi_rocks [sage] 04/08/28 00:26 ID:IBxR98vc(1/2) AAS
せっかくマルチプラットフォームな環境で走るSDLなので、
共通のAPIを提供しておいて、そのAPIが各々のOSの
ネイティブな入力機構を使うのに賛成です。
Mac OS Xに関しては、X11を使っている場合に限っては、
Linuxなどと同じX11経由の入力機構が使えると思います。
私はLinuxでSDLを動かしているので、X11(XIM経由)を少しやってみます。
538(3): sgi_rocks [sage] 04/08/28 02:14 ID:IBxR98vc(2/2) AAS
ふと思ったのですが、日本語入力機構だけ提供するのが良いのか、
それらを含めたSDLを使ったGUIを提供した方が良いのでしょうか?
入力している時の、変換候補などの表示や、入力欄の事を考えると、
そこだけ他のGUIと違ってしまうのも変な感じがしなくもないのです。
簡単なGUIも一緒に提供するのも良いかもしれない、と思うのですがどうでしょう。
539: 529 [sage] 04/08/28 13:34 ID:D9fRqR5k(1) AAS
>>533とりあえずmainはSDL_mainに置換されるという話なのでもちろんint main(int argc, char* argv[])
は書いているのですが、それでもError: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0W32.OBJ が参照)
が表示されるというのは謎ですね…。このエラーメッセージが何を言っているかがいまいちよく分からないのですが、
多分システムからコールバックされるべき_main、が無いってことなんですかね?
SDLmain.libでそっちの方が定義されてるはずなのに…orz
>>538
私は完璧に素人なのでこんなことにコメントするのもちとあれなのですが、
GUIごと提供してくれるとかなり便利そうな気もしますね。
540: 名前は開発中のものです。 [] 04/08/28 15:30 ID:YZXmLvih(1) AAS
>>538
とりえあず日本語入力機構だけを提供した方がいいと思います.
GUIは結局アプリケーション作る人次第な気がするので…
541: 名前は開発中のものです。 [sage] 04/08/28 15:58 ID:QqhNTGOx(1/2) AAS
7以降ってどんだけの人材と時間が費やされてるんだろうな?
よくあのペースで発表・発売できるもんだよ。
俺も将来はあのくらいの会社をもちたい。
542: 名前は開発中のものです。 [sage] 04/08/28 16:01 ID:QqhNTGOx(2/2) AAS
うはwwww
誤爆です。
543: 531 ◆pm4Rr1N8T6 [sage] 04/08/28 16:23 ID:doDxlGS3(1) AAS
>>538
GUI 部分はあとからでも付け足せるから先に入力機構だけでいいんじゃないかな。
と思いながら Win32 部分を作ってたんだけどさ、
まさか編集可能なウィンドウ(テキストボックスなど)が付いてないと
IME を入力可能状態にできないウィンドウシステムってある?
どうも上手くいかないんだけど、Win32 とかはそうなってるのかな。
うーん、ちょっと怖いなあ。GUI セットじゃないと厳しいかな。
とりあえず共通 API は、
・ネイティブな C で書く
・初期化関数で構造体を生成してポインタを返し、終了関数で開放
・ポリモーフィズムは構造体内に関数へのポインタを保持することで実装
・各処理系ごとにプリプロセッサで分岐し、初期化関数内の処理を切り分ける
って感じでいいかな。
SDL 本体内部の SDL_rwops や、多くの SDL 系ライブラリで使用されてる方法だから、
ソースを読めばもっと具体的な実現方法は把握できると思う。
ある程度各処理系の情報、実装の方向性がまとまってきたら、
共通 API を作るためのフレームワークを実装するよ。
一応 smpeg みたいな例もあるし、C++ で書いても問題は無いと思うけど、どっちがいいかな。
544(2): 529 [sage] 04/08/29 10:00 ID:o5xfi0oD(1/2) AAS
相変わらずうまく行きませんな…。
公式ページからSDL.dllをダウンロードしてきてimplibでSDL.libを生成して、
SDL_win32_main.cをコンパイルしてSDL_main.libを作っても駄目でした。
最近のソースにはBorland用のライブラリ一式があるんですがあれは使っていいのでしょうかね?
Error: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0X32.OBJ が参照)
もう見飽きた…orz
545(1): 名前は開発中のものです。 [sage] 04/08/29 12:50 ID:dvcQQr7Q(1/3) AAS
>>544
一応、念のため聞いておくが、
SDL.libはリンクしているけどSDL_main.libをリンクし忘れているなんてことは無いよな?
546(2): 名前は開発中のものです。 [sage] 04/08/29 14:02 ID:iNpWlI3a(1/2) AAS
$ sdl-config --libs
-L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows
547: 名前は開発中のものです。 [sage] 04/08/29 14:57 ID:dvcQQr7Q(2/3) AAS
>>546
それ、cygwinの場合でしょ?>>529529(8): 名前は開発中のものです。 [sage] 04/08/26 22:50 ID:JtN6FZlL(2/2) AAS
あ、よく見たらビルドできてました。
いや、SDLからIMEの文字列を取得しようと思ったんですが、そのままだと
メッセージが取得できないらしくて、少しソースを書き換える必要が出てきたんですよ。
何にせよとりあえずはこれでうまく出来そうです。ありがとうございました。
の場合はbccらしいから同じとは限らないし。
548: 名前は開発中のものです。 [sage] 04/08/29 15:00 ID:dvcQQr7Q(3/3) AAS
あ。>>546のはMinGW+MSYSのほうかもしれないすね。
549(1): 名前は開発中のものです。 [sage] 04/08/29 17:36 ID:Vt1Safbs(1) AAS
>>544
オプションを-Wにしてみろ。
550(1): 529 [sage] 04/08/29 19:35 ID:o5xfi0oD(2/2) AAS
>>545
SDL.libとSDL_main.libは同じフォルダにおいてフォルダにリンクをしてるので
多分し忘れということは無いと思うんですが…。
>>549
-Wを入れると今度は
Error: 外部シンボル 'WinMain' が未解決(E:\BCC55\LIB\C0W32.OBJ が参照)
となるんでどうしたものか…。
一応構造的にはSDL_main.libの_mainやらWinMainがコールバックされてそこから
mainが置換されたSDLmainの方に制御が移されるんですよね?
それともそれをやるにはコンパイルするときにコマンドラインオプションが必要とか?
もうわけわかんないです…。
551: 名前は開発中のものです。 [sage] 04/08/29 20:24 ID:iNpWlI3a(2/2) AAS
まずはtdumpとかでSDL_main.libにWinMainや_mainが存在することを確認した方がよいのでは。
552: 名前は開発中のものです。 [sage] 04/08/29 23:02 ID:hlhX5yl6(1/2) AAS
>>550
> 一応構造的にはSDL_main.libの_mainやらWinMainがコールバックされてそこから
> mainが置換されたSDLmainの方に制御が移されるんですよね?
どう考えてるのかよくわかんないんだけど、実際には
1. SDL_win32_main.c の中の WinMain() が呼ばれる
2. その WinMain() が consol_main() を経由して SDL_main() を呼ぶ
3. SDL_win32_main.c が SDL_main.h を include しており、
その中で main() が SDL_main() として define されている
という作りになってる。
要するに、SDLmain.lib の中の WinMain() によって起動して、
その WinMain() が君のソースの中の main() を呼ぶって仕組み。
WinMain() で起動するために -W オプションは必須だね。
BCC が使う OMF っていうオブジェクトファイル、ライブラリファイルの形式では
関数の頭にアンダーバーを付けることになってるっぽい。
従って、main() をリンクする時には _main って部分を探すんだよ。
「bcc32.exe に -W オプションをきちんとつけて」
「`SDLmain.lib' と、`main() のあるソースから作った .obj ファイル' の両方をきちんとリンクする」
というプロセスが必要だよ。
常にどれかが抜けてるんだと思う。
553: 531 ◆pm4Rr1N8T6 [sage] 04/08/29 23:55 ID:hlhX5yl6(2/2) AAS
うーん、Win32 では編集可能なウィンドウが無くても IME を ON の状態にはできるんだけど、
このまんまじゃ入力状態を取得できないなー。
表示すらしてないわけだから入力事態が行われてなさそう。
やっぱり GUI をセットにしないと駄目っぽい。
とりあえず、枠線付けただけのテキストボックスを CreateWindow() して
その GUI 内で IME による入力をできるようにしてみるよ。
こういうアプローチを取ると IME による入力部分だけ
OS 依存のフォント表示になってしまうけど、
その辺はもっと煮詰めてから考えることにする。
554(1): 529 [sage] 04/08/31 00:00 ID:QiRAdHy6(1) AAS
自己解決した。
555: 529 [sage] 04/08/31 00:27 ID:mI6iYA96(1/2) AAS
>>529
??まだ解決してませんが。
まぁもうちと粘ってみます。何か進展(&壁が)あったらまた来るかもしんないです。
556: 529 [sage] 04/08/31 00:29 ID:mI6iYA96(2/2) AAS
うお、失礼。
誤:>>529
正:>>554
変な書き込みするから混乱しましたよ(笑
557: sgi_rocks [sage] 04/08/31 04:06 ID:hQvLtj9A(1) AAS
SDL_SysWMinfoではなくて、各々のOSからのメッセージが入ってる構造体の方を、
SDL_PeekEventかなんかで定期的にチェックするのが良いのかも、と思っています。
最初はSDL_SysWMinfoのwindowのIDを使って、イベント自体を自分でマップしようとしていたのですが、
どうもSDL自体がマップしようとしてるイベント等と衝突する可能性もありそうなので、
イベント自体はすべてSDLに任せといて、SDL_Event構造体にある、SDL_WMMsg(やったっけ?)のwindow
に対するメッセージをチェックしつつ、もしそれがIM関連だった場合のみIM関連のものを実行するのが良いかもしれません。
実際にテストでやってみて、できたらまた書きます。
OpenGL使ってる場合は、別にコンテキストが用意されてるみたいなのですが、
WindowsでのOpenGLの扱いがどうなってるかは良くわからないので時間かかるかもしれませんが・・・。
558(1): 531 ◆pm4Rr1N8T6 [sage] 04/09/01 04:52 ID:Iu2ojuI1(1/2) AAS
GUI を使うってのは、ウィンドウシステム(この場合 Windows)標準のテキストボックスを使うって意味で、
子ウィンドウ(この場合テキストボックス)を作るために SDL_SysWMinfo を使ってるって意味で言ってたんだけど、
アプローチが違うから伝わってなかったみたいでごめん。
で、Windows 側でテキストボックス(エディットコントロール)を置いてみたんだけど、
どーしてもキーボードからの文字入力ができない。
まあよく考えると DirectX や OpenGL を使ってプライマリに描画されると
子ウィンドウは消えてしまうから元々この方法じゃ駄目かも知れないけど、
貼り付けや切り取りなんかはできるのに
一切の文字の入力ができないのはやっぱりおかしい。
と思ってソース読んでみたら、SDL め、
メッセージループでキーボードイベントを SDL の中に取り込んだあと
Windows 標準のウィンドウプロシージャーに渡さず破棄してる。
当然ウィンドウにキーボードイベントは通達されず、文字入力は不可能。
ALT+F4 での終了や ALT+SPACE でのメニュー出現が動かないのもこのせい。
そこで SDL_WMmsg を使ってみようとしたんだけど、
SDL で拾えなかったものだけを扱ってるもんだから
Windows 固有のキーボードイベントは破棄されててどうやっても取得できない。
もう一段ウィンドウプロシージャを噛ませるしか無いかな。
こりゃ大変だ……
559: 531 ◆pm4Rr1N8T6 [sage] 04/09/01 04:56 ID:Iu2ojuI1(2/2) AAS
な、長すぎる。なんかスレ違いになってきてごめん。どっか別の場所に移動するよ。
560(2): 名前は開発中のものです。 [sage] 04/09/01 10:29 ID:Ph6g14fm(1) AAS
なんとなく。
Anthyのライブラリを使って自前で漢字変換するようにすればよいのではないかと思った。
sdlskkも同じような方式だっけ?なら同じようなのを増やしても意味無いな・・・。
上下前次1-新書関写板覧索設栞歴
あと 427 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.018s