Как получить выходные данные (объявленные с использованием указателей int) из функции, написанной на C ++, с использованием SWIG в Ruby?В приведенной ниже расшифровке я объявляю 'a' и 'b', чтобы инициализировать их как целые числа, но на самом деле они должны быть выходными.
irb(main):001:0> require 'vetms.rb'
=> true
irb(main):002:0> a=3
=> 3
irb(main):003:0> b=4
=> 4
irb(main):004:0> $v.button a, b
ArgumentError: Wrong arguments for overloaded method 'BaseInterface.button'.
Possible C/C++ prototypes are:
bool BaseInterface.button(int *id, int *event)
bool BaseInterface.button(int *id)
bool BaseInterface.button()
from (irb):4:in `button'
from (irb):4
from :0
(Правка) SWIGкод не примечательный - я использую %, включая 'pointers.i' , но я не уверен, что я получу с этим.'vetms.rb' просто требует сгенерированной библиотеки и создает объект $ v.Моя главная проблема здесь связана с моей функцией C ++, с которой Ruby не может связать мои объекты 'a' и 'b' с:
bool BaseInterface.button(int *id, int *event)
Моя проблема в том, что если бы я делал это в прямой C, япередал бы адрес 'a' и 'b' функции, а функция установила бы содержимое - 'a' и 'b' являются выходными переменными.Поэтому я бы хотел, чтобы вызов '$ v.button a, b' делал то же самое.Теперь я не уверен, что передача переменных по ссылке или адресу является даже концепцией в Ruby, мне просто нужны два выхода из этого вызова, и я не знаю, как этого добиться.
Документы SWIG предполагают, чтоу вас может быть такая функция (это в «SWIG and Ruby», раздел 32.3.5 Указатели):
Foo *get_foo();
void set_foo(Foo *foo);
Но они предоставляют только один пример использования для возвращаемого значения:
irb(main):001:0> foo = Example::get_foo()
#<SWIG::TYPE_p_Foo:0x402b1654>
В этом случае, как использовать "set_foo" в Ruby?
Я посмотрю на FFI, но кто-нибудь знает, как это сделать с SWIG?