0

私は、Google Chrome 用の C ベースのネイティブ クライアント モジュールに取り組んできました。NaCl システムによって呼び出されるモジュール関数の多くには、モジュール インスタンスを一意に識別する PP_Instance のパラメーターがあります。

私の質問: ユーザー データをこのインスタンス ハンドルに関連付ける方法はありますか?

C API は、それが不透明なハンドルであることを指定します。ユーザー データをハンドルにリンクする機能はありません。現在、モジュール内で一連のグローバル変数を使用して、関数間で状態を共有する必要があります。それは正しい解決策のようには感じません。複数のインスタンスがプロセス空間を共有するかどうかはわかりませんが、ここでは何も仮定していません。

グローバル スコープ内に存在する一意のコンテキストにインスタンスをマップするために、ある種のルックアップ テーブルを実装できると思います。しかし、それは C ベースの API には不要なようにも思えます。C++ API は、そのクラスによってこれを回避します。

4

1 に答える 1

1

PP_Instance は、プラグイン インスタンスに関連付けられた状態/オブジェクトを検索するためのキーとして使用する必要があります。たとえば、含まれているフレームに複数の埋め込みタグが存在する場合、API に従ってモジュール内で複数のプラグイン インスタンスをインスタンス化できます。現在、Pepper の NaCl 実装はこれを行いません。代わりに、それぞれが単一のペッパー プラグイン インスタンスをインスタンス化する単一のモジュールを含む複数のプロセスが作成されます。ただし、これは変更される可能性のある実装の詳細 (またはおそらくバグ?) であり、防御的にプログラムして、複数の DidCreate イベントを処理できるようにすることをお勧めします。

もちろん、あなたの NaCl モジュールが他の誰にも使用されないことが保証されていて、同じモジュールの 2 つの埋め込みが決してないことがわかっている場合は、シングルトン インスタンスを想定してグローバル状態を使用しても問題ないかもしれませんが、 「正しい」方法はそれほど難しくありません。

このトピックの詳細については、native-client-discuss スレッドを参照してください。

于 2012-04-30T05:06:05.523 に答える