module OCI8::Util
def self.check_win32_pe_arch(filename, package)
def self.check_win32_pe_arch(filename, package) open(filename, 'rb') do |f| # DOS header. if f.read(2) == 'MZ' f.seek(60, IO::SEEK_SET) pe_offset = f.read(4).unpack('V')[0] f.seek(pe_offset) # PE header. if f.read(4) == "PE\000\000" case f.read(2).unpack('v')[0] when 0x8664 if [nil].pack('P').size == 4 raise LoadError, "\"#{filename}\" is x64 DLL. Use 32-bit #{package} instead." end return true when 0x014c if [nil].pack('P').size == 8 raise LoadError, "\"#{filename}\" is 32-bit DLL. Use x64 #{package} instead." end return true end end end raise LoadError, "\"#{filename}\" is not a valid Win32 application." end nil rescue nil end # self.check_win32_pe_arch