Hello.

I tried to call a simple method on Windows (XP, Win7 - didn't matter)
machine and it seems that i will get a segmentation fault depending of
the Ruby version. Any ideas why that might happen?

Here is the offending code (doc for EnumWindows is at
http://msdn.microsoft.com/en-us/library/ms633497(v=VS.85).aspx):

require 'dl/import'

module Testing

  extend DL::Importable

  dlload "user32.dll"

  USER32 = DL.dlopen("user32")
  EnumWindows = USER32['EnumWindows', 'IPL']

  CALLBACK = DL.callback('ILL') do |curr_hwnd, p|
    p curr_hwnd
    0
  end

  module_function

  def enumerate
    EnumWindows.call(CALLBACK, 0)
  end
end

Testing.enumerate

-------------------

And when trying to run it with different Ruby 1.8.6 patchlevels, i see
the following output:

S:\>ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

S:\>testing.rb
328312

S:\>ruby -v
ruby 1.8.6 (2010-02-04 patchlevel 398) [i386-mingw32]

S:\>testing.rb
393884
S:/testing.rb:20: [BUG] Segmentation fault
ruby 1.8.6 (2010-02-04) [i386-mingw32]


This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.

-------

So, p398 gives me a segfault. On the other hand FFI example at
http://wiki.github.com/ffi/ffi/windows-examples works perfectly.

Does that mean that I have to convert one old Ruby lib to use FFI
altogether? Or even if it doesn't mean that, then would you recommend me
to do it?

Jarmo
-- 
Posted via http://www.ruby-forum.com/.