1

スクリプトで CFUNCTYPE オブジェクトを作成し、それらをコールバックとして c に渡しています。それらをローカルにすると、それらはすぐに破棄され、アクセス違反エラーが発生します gc.disable() を試みましたが、役に立ちません。今日は、グローバル リストを作成し、必要に応じて FUNCTYPE オブジェクトを配置/削除しています。より良い解決策はありますか?

4

2 に答える 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 に答える