我使用SWIG
将我的C++
程序与Python
连接起来。从cFunctions.py
中,我像下面这样调用名为checkVal
的C
函数:
lib = cdll.LoadLibrary('./test.so')
xml_bytesTrx = bytearray(b'<xml>...</xml>')
a1 = (ctypes.c_byte*513)(*xml_bytesTrx)
class EFT_TRX(Structure):
_fields_ = [
("a2",c_ulong),
("a3",c_char*16),
("a4",c_char*4),
("a5",c_ushort),
("a6",c_char*41),
("a7",c_char*13),
("a8",c_char*21),
("a1",c_byte*513)
]
Trx = EFT_TRX(0,"0",'CHF',0,'4506445638161117',"123456123456","202020",
a1)
def check(arg1, arg2):
eftTransactionRes = lib.checkVal(arg1,arg2,Trx.a4,Trx.a5,
Trx.a6,Trx.a7,Trx.a8,
Trx.a1)
Trx.a3 = arg2
return eftTransactionRes
同时在 C 语言的头文件(test.h
)中定义如下:
long TEST_API checkVal(
_IN____ const unsigned long a2,
_INOUT_ char a3[16],
_IN____ const char a4[4],
_IN____ const unsigned short a5,
_IN____ const char a6[41],
_IN____ const char a7[13],
_IN____ const char a8[21],
_INOUT_ char a1[513]
);
现在我编写了一个测试Python代码来调用C函数(可以从cFunctions.py
中访问)。问题是,当我从我的测试代码中调用“check”(cFunctions.check(10,20)
)时,我能够执行它,但它却从未返回任何东西!
但如果我像这样从cFunctions.py
内部调用check
:
check(10,Trx.a2)
它返回结果。我做错了什么?为什么当我从test.py调用时check没有返回任何东西?
check
定义中,lib.checkVal(a2,a3,Trx.a4...)
的前两个参数被调用时没有使用Trx引用。也许在cFunctions.py中a2和a3被正确定义了,但在测试代码中没有。此外,你从未使用过kulTrxType
,这是有意为之吗? - Bort