module FFI
Public Class Methods
raise_windows_error(function, err = FFI.errno)
click to toggle source
Raises a Windows specific error using SystemCallError that is based on the err
provided, with the message prepended with the function
name.
# File lib/ffi/win32/extensions.rb, line 100 def raise_windows_error(function, err = FFI.errno) raise SystemCallError.new(windows_error_message(function, err), err) end
windows_error_message(function, err = FFI.errno)
click to toggle source
Returns a Windows specific error message based on err
prepended with the function
name. Note that this does not actually raise an error, it only returns the message.
The message will always be English regardless of your locale.
# File lib/ffi/win32/extensions.rb, line 80 def windows_error_message(function, err = FFI.errno) error_message = "" # ARGUMENT_ARRAY + SYSTEM + MAX_WIDTH_MASK flags = 0x00001000 | 0x00000200 | 0x000000FF # 0x0409 = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) # We use English for errors because Ruby uses English for errors. FFI::MemoryPointer.new(:char, 1024) do |buf| length = FormatMessage(flags, nil, err , 0x0409, buf, buf.size, nil) error_message = function + ": " + buf.read_string(length).strip end error_message end
Private Instance Methods
raise_windows_error(function, err = FFI.errno)
click to toggle source
Raises a Windows specific error using SystemCallError that is based on the err
provided, with the message prepended with the function
name.
# File lib/ffi/win32/extensions.rb, line 100 def raise_windows_error(function, err = FFI.errno) raise SystemCallError.new(windows_error_message(function, err), err) end
windows_error_message(function, err = FFI.errno)
click to toggle source
Returns a Windows specific error message based on err
prepended with the function
name. Note that this does not actually raise an error, it only returns the message.
The message will always be English regardless of your locale.
# File lib/ffi/win32/extensions.rb, line 80 def windows_error_message(function, err = FFI.errno) error_message = "" # ARGUMENT_ARRAY + SYSTEM + MAX_WIDTH_MASK flags = 0x00001000 | 0x00000200 | 0x000000FF # 0x0409 = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) # We use English for errors because Ruby uses English for errors. FFI::MemoryPointer.new(:char, 1024) do |buf| length = FormatMessage(flags, nil, err , 0x0409, buf, buf.size, nil) error_message = function + ": " + buf.read_string(length).strip end error_message end