[Win32utils-devel] Trouble with get_osfhandle and MSVC

Heesob Park phasis at gmail.com
Fri Jul 13 02:10:46 UTC 2012


Hi,

2012/7/12 Daniel Berger <djberg96 at gmail.com>:
> Hi,
>
> Ruby 1.9.3-p194
>
> I'm having trouble getting get_osfhandle to work with a Ruby compiled
> with MSVC. With mingw this code works fine, but with MSVC I get an
> invalid handle error.
>
> require 'windows/handle'
> require 'windows/error'
>
> include Windows::Handle
> include Windows::Error
>
> file   = File.open('test.txt')
> handle = get_osfhandle(file.fileno)
>
> if handle == INVALID_HANDLE_VALUE || handle == 0
>   raise get_last_error
> end
>
> file.close
>
> Any ideas?
>
As you already know, this is due to the version mismatch of the msvcrt.dll.
The source code of windows/api.rb line #11 - 21

  if CONFIG['host_os'].split('_')[1]
    if CONFIG['host_os'].split('_')[1].to_i >= 80 &&
      File.exists?(File.join(CONFIG['bindir'], 'ruby.exe.manifest'))
    then
      MSVCRT_DLL = 'msvcr' + CONFIG['host_os'].split('_')[1]
    else
      MSVCRT_DLL = 'msvcrt'
    end
  else
    MSVCRT_DLL = 'msvcrt'
  end

should be

  if CONFIG['host_os'].split('_')[1]
    if CONFIG['host_os'].split('_')[1].to_i >= 80
    then
      MSVCRT_DLL = 'msvcr' + CONFIG['host_os'].split('_')[1]
    else
      MSVCRT_DLL = 'msvcrt'
    end
  else
    MSVCRT_DLL = 'msvcrt'
  end

Regards,

Park Heesob


More information about the win32utils-devel mailing list