在项目文件夹中我有:
libtest.so
test.h
我已经在我的python代码中导入了ctypes
(不确定是否有必要)并且我加载了.so文件如下:
lib = cdll.LoadLibrary('./libtest.so')
在" test.h" C头文件我有:
long TEST_API test(
___OUT_ char text[41],
___OUT_ char* pcReceiptSignature,
);
我打电话给#34; test
"来自以下的python代码:
class StructA(Structure):
_fields_ = [("text", c_char*41),
("pcReceiptSignature",c_char*1),
]
sampleStruct = StructA("","")
def test2():
res = lib.test(sampleStruct.text, sampleStruct.pcReceiptSignature)
return res
但执行在某处失败,我从未到过" return res
"线。
对于在结构化中定义的c_chars指定的长度,我也试过给它们没有长度(没有变化)。
我在这里做错了什么。反正有没有看到执行失败的地方?
答案 0 :(得分:0)
你真的应该在调试器下运行代码,用.so
等编译-g
。
但原始代码中的一个明显错误是char* pcReceiptSignature
被声明为 out 参数?因此我想你想为它预留一些空间,由函数填充,但没有一个可用(你使用的是c_char_p
而不是数组!)。 pcRpcReceiptSignature
是指向常量字符串""
的指针,因此覆盖它不会非常安全。