5

これを文脈に入れるために、私はC DLLのラッパーを作成しています - かなり複雑なユースケースですが、私に固執してください!

ラッパー クラスの初期化中に、C DLL の関数のエイリアスを作成して、クラスが後で簡単にアクセスできるようにします。私が行う追加のタスクは、クラス内の関数へのコールバックを DLL に渡すことです。これは静的変数に保存され、後で使用されます。

最後に、DLL 内の関数を繰り返し呼び出す別のスレッドを生成します。このスレッドは何らかの作業を行い、実行中のさまざまな時点で、クラスの init フェーズで割り当てられたコールバックを使用して Python プログラムにコールバックする必要があります。

この方法でコールバックが呼び出されると、次のメッセージが表示されます。

WindowsError: exception: access violation reading 0x00000001

コールバックを割り当てた同じスレッドでコールバックをテストすると、DLL はそれを正常に呼び出すことができ、すべての引数が Python に渡されるため、これはスレッド化に関係していると思われます。コールバックを永続化するために使用している DLL 内の変数に対して、何らかの保護が適用されていますか?

4

1 に答える 1