C函数执行到哪里停止
Where does C function execution stop
在我的项目文件夹中:
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,
);
我从 python 代码调用“test
”,如下所示:
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 指定的长度,我也尝试不给它们指定长度(没有变化)。
我在这里做错了什么。反正有没有看到执行失败的地方?
你真的应该 运行 调试器下的代码,用 -g
编译 .so
等等
但是您原始代码中的一个明显错误是 char* pcReceiptSignature
被声明为 out 参数?因此我想你想为它保留一些 space ,由函数填充,但是 none 可用(你使用的是 c_char_p
而不是数组!)。 pcRpcReceiptSignature
是指向常量字符串 ""
的指针,因此覆盖它不是很安全。
在我的项目文件夹中:
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,
);
我从 python 代码调用“test
”,如下所示:
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 指定的长度,我也尝试不给它们指定长度(没有变化)。
我在这里做错了什么。反正有没有看到执行失败的地方?
你真的应该 运行 调试器下的代码,用 -g
编译 .so
等等
但是您原始代码中的一个明显错误是 char* pcReceiptSignature
被声明为 out 参数?因此我想你想为它保留一些 space ,由函数填充,但是 none 可用(你使用的是 c_char_p
而不是数组!)。 pcRpcReceiptSignature
是指向常量字符串 ""
的指针,因此覆盖它不是很安全。