使用ctypes在python中对c数据类型进行Segfaults

时间:2012-08-02 05:29:37

标签: python ctypes

ctypes来说很新。尝试使用ctypes,因为我想使用libquicktime库来使用python将文本轨道插入到电影中。我正在尝试以下内容,我遇到了seg故障。 我认为the doc说我应该通过ins64_t持续时间,(在我的情况下,随机数为123进行测试)。不知道如何定义int64_t var:

>> import ctypes    
>> lqt = ctypes.cdll.LoadLibrary('libquicktime.so.0')    
>> qth = lqt.quicktime_open('/home/blah/movies/Test.018699.mov', 0, 1)    
>> lqt.lqt_add_text_track(qth)    
0    
>> lqt.lqt_set_text_language(qth, 1, 'eng')    
0    
>> lqt.lqt_write_text(qth, 1, 'test message', 123)
Segmentation fault

如果有人能解释我如何在python中映射像(int64,uint64)这样的数据类型会非常有帮助吗?

1 个答案:

答案 0 :(得分:0)

在调用函数之前定义函数的参数类型。

lqt.lqt_write_text.argtypes = [ctypes.c_void_p,ctypes.c_int,ctypes.c_char_p,ctypes.c_int64]
lqt.lqt_write_text.restype = None
lqt.lqt_write_text(qth, 1, 'test message', 123)

注意像quicktime_t这样的不透明类型只能将void指针替换为类型。