Я использовал SWIG
для подключения моей программы C++
с помощью Python
. Из cFunctions.py
я вызываю C
функцию с именем checkVal
следующим образом:
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
). Проблема в том, что когда я вызываю "проверку" из своего тестового кода (cFunctions.check(10,20)
), я достигаю его, но он никогда ничего не возвращает!
Но если я вызову check
изнутри cFunctions.py
, как это:
check(10,Trx.a2)
Он возвращает результат. Что я делаю не так? Почему проверка не возвращает ничего, когда я вызываю его из моего test.py?