• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:RubyでWin32APIのCreateWindow)

RubyでWin32APIのCreateWindow

このQ&Aのポイント
  • 初めまして。RubyでWin32APIを使ってプログラミングをしようとしています。
  • RubyリファレンスマニュアルのWin32APIのページやグーグル検索などを利用し一通り調べて
  • rubyのバージョンは ruby 1.8.6 です。 コードのどこが間違っているのか、エラーの意味、参考になるwebサイト(rubyでWin32APIのCGIを扱っているサイト)を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

Rubyは触ったことありませんので細かいところは不明ですが… Dependency Walkerでuser32.dllを見ると…CreateWindowAという関数はエクスポートされていません。 つまり、そんなAPIは存在しません。 # Dependency Walkerはフリーで入手可能です。 WindowsSDKをインストールしてヘッダファイルを確認すると… CreateWindowはCreateWindowExでdefineされています。 # user32.dllにCreateWindowExはエクスポートされています。 ということで、CreateWindowExでWin32API.newすればよいのではないでしょうか。 # 第1引数にWndExtraのサイズを指定する必要があるようです。 # CreateWindow()では0を指定していることになっています。 しかし…コモンコントロールならともかく、それ以外のウィンドウだったとしてウィンドウプロシージャはどうなるんでしょうかね?

noname#259243
質問者

お礼

回答ありがとうございます! さっそくCreateWindowExを使って試してみたところ、実行はできました! 戻り値が0(エラー)で画面は表示されませんが。。。 createwindow = Win32API.new('user32', 'CreateWindowEx', %w(l p p l i i i i l l l p), 'l') p createwindow.call(0, "fff", "HELLO", 0xc00000, 100, 100, 200, 200, 0, 0, 0, nil) ウィンドウプロシージャもウィンドウプロシージャ専用のインスタンス作ってコールバック関数のProcを渡す感じなのかなーって漠然と考えてるんですが・・・わかりません。 hinstanceに何を渡していいのやら・・・ もう少し試行錯誤してみたいと思います。参考になりました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kenken-1
  • ベストアンサー率43% (13/30)
回答No.2

私もRubyをよく知らないので参考までに。 CreateWindowExが失敗する理由はGetLastErrorを使えばわかるはず。 あとhInstanceに渡すのはGetModuleHandle(NULL)の戻り値でいい気がする。

noname#259243
質問者

お礼

回答ありがとうございます。 おかげさまでウィンドウを表示させる事が出来ました! GetLastErrorがとっても便利でした。

noname#259243
質問者

補足

とりあえずウィンドウ作成できたので、ブログにまとめてみました。 http://infosc.blog104.fc2.com/ 誰かの参考になればと思います。

すると、全ての回答が全文表示されます。

専門家に質問してみよう