0

非常に新しいctypesです。libquicktime ライブラリで遊んで、Python を使用してムービーにテキスト トラックを挿入したいので、ctypes を使用しようとしています。私は次のことを試していますが、セグフォルトが発生します。ドキュメントが言うように、私は期間を渡す必要があると思いますins64_t(私の場合、テスト用の乱数123)。どのようにint64_tvarを定義するのだろうか:

>> 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) のようなデータ型をマップする方法を誰かが説明できれば、非常に役に立ちますか?

4

2 に答える 2

0

関数プロトタイプを使用して引数をチェックできます。

int64_tです ctypes.c_int64

于 2012-08-02T05:42:26.090 に答える
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 ポインターを型として置き換えることができることに注意してください。

于 2012-08-02T13:38:54.893 に答える