Project

General

Profile

Bug #3302

Updated by jeremyevans0 (Jeremy Evans) 12 months ago

=begin 
  
  I tried to call a simple method on Windows (XP 32bit, Win7 64bit - didn't matter) 
  machine and it seems that i will get a segmentation fault depending of 
  the Ruby version. 
 
  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. Also using Win32::API works. 
 
  Jarmo 
 
 =end 
 

Back