def attach_variable(mname, a1, a2 = nil)
cname, type = a2 ? [ a1, a2 ] : [ mname.to_s, a1 ]
address = nil
ffi_libraries.each do |lib|
begin
address = lib.find_variable(cname.to_s)
break unless address.nil?
rescue LoadError
end
end
raise FFI::NotFoundError.new(cname, ffi_libraries) if address.nil? || address.null?
s = FFI::Struct.new(address, :gvar, find_type(type))
self.module_eval "@@ffi_gvar_\#{mname} = s\ndef self.\#{mname}\n@@ffi_gvar_\#{mname}[:gvar]\nend\ndef self.\#{mname}=(value)\n@@ffi_gvar_\#{mname}[:gvar] = value\nend\n"
address
end