1

Windows の C++ で NPAPI プラグインを作成しています。プラグインがインスタンス化されたら、メイン アプリケーションからプライベート データを渡したい (具体的には、C++ オブジェクトへのポインターを渡したい)。これを行うメカニズムはないようです。何か不足していますか?オブジェクトはプラグイン インスタンスのスコープ外に存在し、プラグイン インスタンスが破棄されても存続するため、単純にプラグイン インスタンス内にオブジェクトを作成することはできません。

編集:

CEF 経由で C++ の組み込みプラグインを使用しています。これは、私のコードが本質的にブラウザーとプラグインであることを意味します。明らかに、これは標準の NPAPI プラグインの動作とは異なるため、おそらく NPAPI 自体でサポートされているものではありません。

4

2 に答える 2

2

C++ オブジェクトを javascript に渡すことはできません。できることは、C++ オブジェクトでもある NPObject を渡し、NPRuntime インターフェイスを介して物事を公開することです。

詳細については、 http://npapi.com/tutorial3を参照してください。

また、このようなことを大幅に簡素化するFireBreathフレームワークを確認することもできます。

編集:あなたの質問を誤解しているようです。必要なのは、プラグイン インスタンスにリンクされたデータを保存できるようにすることです。必要なのは、プラグインの作成時に提供される NPP です。NPP には、ndata (ネットスケープ データ) と pdata (プラグイン データ) の 2 つのメンバーがあります。pdata ポインターはユーザーが制御できます。必要な任意の値を指すように設定し、使用したいときにいつでも実際の型にキャストし直すことができます。もちろん、NPP_Destroy で必ずキャスト バックして削除してください。私は通常、いくつかの情報を保持する構造体を作成します。FireBreath はこれを使用し、すべてのプラグイン呼び出しを Plugin オブジェクト インスタンスに送信して、通常のオブジェクトであるかのように動作できるようにします。

関連する FireBreath のコード例: https://github.com/firebreath/FireBreath/blob/master/src/NpapiCore/NpapiPluginModule_NPP.cpp#L145

NPP_New と NPP_Destroy に特に注意してください。また、NPP の pdata メンバーの使用方法にも特に注意してください。

これについては、http://npapi.com/tutorial2でも説明されています。

于 2011-10-21T20:47:50.640 に答える
1

この概念は NPAPI 用語では意味をなさないため、NPAPI を介してこれを行う方法はありません。生のポインターを渡す何かをハックしたとしても、それはすべてが 1 つのプロセスで実行されていることを前提としているため、CEF が Chromium が中心に設計されたマルチプロセス アプローチに切り替わると、ハックは破綻します。

それらが異なるプロセスであるふりをして、メインアプリケーションとプラグインの間で必要なものを共有する非 NPAPI メソッドを使用する方がよいでしょう。

于 2011-10-27T09:19:10.350 に答える