C函数执行停止在哪里

时间:2015-02-01 14:11:46

标签: python c shared-libraries execution

在项目文件夹中我有:

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指定的长度,我也试过给它们没有长度(没有变化)。

我在这里做错了什么。反正有没有看到执行失败的地方?

1 个答案:

答案 0 :(得分:0)

你真的应该在调试器下运行代码,用.so等编译-g

但原始代码中的一个明显错误是char* pcReceiptSignature被声明为 out 参数?因此我想你想为它预留一些空间,由函数填充,但没有一个可用(你使用的是c_char_p而不是数组!)。 pcRpcReceiptSignature是指向常量字符串""的指针,因此覆盖它不会非常安全。