[英]How do I pass a numpy array to C++/SWIG using pointers without relying on numpy.i?
[英]How do I get outputs in Ruby using SWIG over a C function taking pointers to output arguments?
如何從Ruby中使用SWIG在C ++中編寫的函數中獲取輸出(使用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'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和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嗎?
沒有SWIG / vetms.rb代碼,很難發表評論。 猜測您需要對Typemap做一些工作。
我建議使用FFI而不是SWIG來連接C代碼
更輕松,更好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.