我已經說(在本例num_piezas
)提交一個int
簡單的工作程序的C++
功能。從<code>Python</code>函數提交「INT」,並使用ctypes的(Python-> C++)「字符串」陣列
Foo.cpp中
#include <iostream>
class Foo{
public:
void bar(int number){
printf("Number is: %d\n", number);
}
};
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo, int number){ foo->bar(number); }
}
fooWrapper.py
from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
def __init__(self):
self.obj = lib.Foo_new()
def bar(self, num_piezas):
lib.Foo_bar(self.obj, num_piezas)
num_piezas = 5
f = Foo()
f.bar(num_piezas)
的事情是,現在我想發送int
陣列,並與數沿着char
陣列。所以,我想:
Foo.cpp中
#include <iostream>
#include <string.h>
class Foo{
public:
void bar(int number, int piezas[3], char prioridades[3][20]){
printf("Number is: %d\n", number);
for(int i=0;i<3;i++) {
printf("%d", piezas[i]);
}
for(int q=0;q<3;q++) {
printf("%s ", prioridades[q]);
}
}
};
extern "C" {
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo, int number, int piezas[3], char prioridades[3][20]){ foo->bar(number, piezas, prioridades); }
}
fooWrapper.py
from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
def __init__(self):
self.obj = lib.Foo_new()
def bar(self, num_piezas, piezas, prioridades):
lib.Foo_bar(self.obj, num_piezas, piezas, prioridades)
piezas = [1, 2, 3]
prioridades = ['normal', 'baja', 'primera pieza']
num_piezas = 5
f = Foo()
f.bar(num_piezas, piezas, prioridades)
的C++
文件編譯正確,但是當我嘗試執行Python函數(python fooWrapper.py
)此錯誤消息顯示:
Traceback (most recent call last): File "fooWrapper.py", line 15, in <module> f.bar(num_piezas, piezas, prioridades) File "fooWrapper.py", line 9, in bar lib.Foo_bar(self.obj, num_piezas, piezas, prioridades) ctypes.ArgumentError: argument 3: <type 'exceptions.TypeError'>: Don't know how to convert parameter 3
我做錯了什麼?我需要做其他事情來通過int
和string
數組作爲參數嗎? 在此先感謝。
你是對的。我確實提出了一個解決OP問題的快速解決方案,但它最好還是蠻幹的。我會在轉班後寫出適當的解決方案。 – lucasg