如何从我在C ++中使用SWIG编写的函数中获取输出(使用int指针声明)?在下面的记录中,我声明一个'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代码并不显着 - 我确实使用%include'spotersters.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和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>
在这种情况下,如何在Ruby中使用“set_foo”?
我会研究FFI,但是有人知道如何用SWIG做到这一点吗?
答案 0 :(得分:0)