スクリプトで CFUNCTYPE オブジェクトを作成し、それらをコールバックとして c に渡しています。それらをローカルにすると、それらはすぐに破棄され、アクセス違反エラーが発生します gc.disable() を試みましたが、役に立ちません。今日は、グローバル リストを作成し、必要に応じて FUNCTYPE オブジェクトを配置/削除しています。より良い解決策はありますか?
2 に答える
1
最も簡単な方法は、CFUNCTYPE オブジェクトをモジュールまたはクラスにアタッチすることです。私は、Python ラッパー モジュール (つまり、すべてを 1 つの名前空間の ctypes レベルで保持する別のファイル) を用意すると便利だと思いました。
必要に応じて、そこからコールバックを追加および削除できます。
于 2012-10-21T09:57:31.367 に答える
1
CFUNCTYPE
デコレータとして使用します。これにより、モジュールの名前空間のコールバック関数が変更され、その参照が保持されます。
CALLBACK = CFUNCTYPE(c_int)
@CALLBACK
def callback():
return 5
my_ctypes_function(callback)
行が完了すると CALLBACK オブジェクトを破棄する次の例とは異なります。
my_ctypes_function(CALLBACK(callback))
于 2012-10-21T14:56:38.560 に答える