Хорошо, я нашел решение:
передать строку идентификатора объекта Ruby ... Не использовать идентификатор в качестве Fixnum, потому что объекты Ruby Fixnum могут иметь длину до 62 бит, но C-биты 32-битные.
Когда вы получите идентификатор объекта, вы можете попытаться получить объект с помощью ObjectSpace._id2ref(object_id_as_string.to_i)
.
Код моего решения:
require 'Qt'
class Foo < Qt::Object
signals 'my_signal(const QString&)'
slots 'my_slot(const QString&)'
def initialize(parent = nil)
super(parent)
connect(self, SIGNAL('my_signal(const QString&)'), self, SLOT('my_slot(const QString&)'))
end
def emit_my_signal
emit my_signal({:foo => :bar}.object_id.to_s)
end
def my_slot(object_id)
hash = ObjectSpace._id2ref(object_id.to_i)
puts hash.inspect
end
end
o = Foo.new
o.emit_my_signal
Может быть, сборщик мусора отправляется на уничтожение хеш-объекта, и попытка получить объект не удалась ...