一部のユーザー データをコールバックに渡すように API を変更するようにサード パーティのソフトウェア ベンダーを説得する助けが必要です。
これは、コールバックが使用されている場所でよく見られる標準的な方法のようです。彼らの開発チームにこれを行うよう説得する弾薬を探しています。
私の理由は、すべての API 呼び出し (コールバックを受け取るものを除く) に対して 1:1 Python バインディングを作成したからです。API もユーザー データに void* を使用した場合... 例:
SOME_API_register_function(char* name, char* desc, void* callback, void* user_data);
それ以外の...
SOME_API_register_function(char* name, char* desc, void* callback);
これにより、これらの関数のバインディングを作成することがはるかに簡単になります (または可能になることさえあります)。私のバインディングは現在 Cython にあり、有効な C コールバックを動的に作成する機能がありません。私は cffi Python ライブラリがこの機能を提供すると信じていますが、これらのバインディングはパフォーマンスが少し遅く、それをやってのけるために彼らが行っている魔法の種類について心配しています.... また、バインディングを移植したくありません.
問題は、このソフトウェアの顧客にお金を払っているにもかかわらず、新しい機能を提供するどころか、バグを認めてもらうのにも時間がかかることです。弾薬が多ければ多いほど良い。ユーザー データに void* を提供するように指示されているプログラミング ガイド、ベスト プラクティスなどのドキュメントは役に立ちます。