Method: VirtualBox::COM::FFIInterface#initialize_for_version

Defined in:
lib/virtualbox/com/ffi_interface.rb

#initialize_for_version(version) ⇒ Object

Initializes the FFI interface for a specific version.



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/virtualbox/com/ffi_interface.rb', line 74

def initialize_for_version(version)
  logger.debug("FFI init: Trying version #{version}")

  # Setup the FFI classes
  COM::Util.set_interface_version(version)
  virtualbox_klass = COM::Util.versioned_interface(:VirtualBox)
  session_klass = COM::Util.versioned_interface(:Session)

  # Setup the OUT pointers
  virtualbox_ptr = ::FFI::MemoryPointer.new(:pointer)
  session_ptr = ::FFI::MemoryPointer.new(:pointer)

  # Call the initialization functions
  @xpcom[:pfnComInitialize].call(virtualbox_klass::IID_STR, virtualbox_ptr, session_klass::IID_STR, session_ptr)
  @virtualbox = virtualbox_klass.new(Implementer::FFI, self, virtualbox_ptr.get_pointer(0))
  @session = session_klass.new(Implementer::FFI, self, session_ptr.get_pointer(0))

  # Make a call to version to verify no exceptions are raised
  @virtualbox.implementer.valid? && @session.implementer.valid?

  logger.debug("    -- Valid version")
  true
rescue ::FFI::NullPointerError => e
  logger.debug("    -- Invalid version")
  false
end