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/.