Ruby/DLでWin32 APIのMessageBoxを呼んでみた

http://ttsky.net/ruby/ruby-dl.html

Rubyの添付ライブラリRuby/DLを使って、Win32 APIのMessageBoxでダイアログ表示をさせるコードを書いてみました。Ruby/DLの使い方は、上記のページにあるtutorialを参考にしました。

コードはこんな感じです。

require 'dl/import'

module Win32
  extend DL::Importable
  dlload 'user32.dll'
  typealias('HWND', 'void *')
  typealias('LPCTSTR', 'unsigned char *')
  typealias('UINT', 'unsigned int')
  extern 'int MessageBox(HWND, LPCTSTR, LPCTSTR, UINT)'

  # type flag
  MB_OK               = 0
  MB_OKCANCEL         = 1
  MB_ABORTRETRYIGNORE = 2
  MB_YESNOCANCEL      = 3
  MB_YESNO            = 4
  MB_RETRYCANCEL      = 5

  # return values
  IDOK     = 1
  IDCANCEL = 2
  IDABORT  = 3
  IDRETRY  = 4
  IDIGNORE = 5
  IDYES    = 6
  IDNO     = 7
end

id = Win32.messageBox(nil, "本文\nOKですか?", "タイトル", Win32::MB_OKCANCEL)
if id == Win32::IDOK
  puts 'OK!'
end

実際の型がよく分からなかったので、HWND 型を void * 型と見なして、LPCSTR 型を unsigned char * 型と見なして typealias を設定したけれど、これで良いのだろうか?
とりあえず手元の環境(Windows XP)では正しく文字表示もできているので、おそらくこれで大丈夫そうなのだけれど。