From: take_tk Date: 2006-03-08T11:09:16+09:00 Subject: [ruby-list:41894] Re: "win32/registry" と "dl/win32" の相性について たけ(tk)です [ruby-list:41888] Re: "win32/registry" と "dl/win32" の相性について にて take_tk さん曰く: > このようなエラーが出た時は、 > 「require "win32/registry"」の《前に》「require "dl/win32"」を入れる、 > > という対策で、よろしいでしょうか? > > 名前の衝突(?)というかクラスの中身のすり替わり(?)の問題は残るような > 気がするので、多少心配ですが、 > その方針でしばらく様子を見てみます。 駄目みたいです。 "dl/win32" の Win32API を前提とするメソッドで、 no implicit conversion from nil to integer (TypeError) というエラーになる。 ---- require "dl/win32" ##require "Win32API" MessageBox = Win32API.new( 'user32' , 'MessageBox' , %w(N P P N) , "N" ) MessageBox_ReturnHash = { 1=>:ok, 2=>:cancel, 3=>:abort, 4=>:retry, 5=>:ignore, 6=>:yes, 7=>:no, 10=>:redo, 11=>:continue} def message_box( handle,text,caption,type=0 ) MessageBox.call( handle , text , caption ,type ) end def say( msg , caption='' , type=0 ) # OK MessageBox_ReturnHash[ret=message_box( 0, msg , caption , type )]||ret end require "win32/registry" def ext_to_cmd(ext) doc = Win32::Registry.open(Win32::Registry::HKEY_CLASSES_ROOT, ext) { |reg| reg.read(nil)}[1] cmd = Win32::Registry.open(Win32::Registry::HKEY_CLASSES_ROOT, "#{doc}\\shell\\open\\command") { |reg| reg.read(nil)}[1] rescue Win32::Registry::Error nil end require "dl/win32" # ←影響なし。 p ext_to_cmd(".doc") # これはOK。 say("test") # ここでエラー。"dl/win32" を前提としたメソッド。 ##no implicit conversion from nil to integer (TypeError) ## G:\apollo\tkUtils\1.rb:7:in `call' ## G:\apollo\tkUtils\1.rb:7:in `message_box' ## G:\apollo\tkUtils\1.rb:11:in `say' ---- Take_tk = KUMAGAI Hidetake たけ(tk)=熊谷秀武