1

同じdllに2つの異なるプラグインを作成することは可能ですか?1つは通信用で、もう1つはキャンバスとして作成できますか?

私は同じクラスでそれを行うことができることを知っていますが、最初のものをウィンドウレスにし(ブラウザーごとに1つだけ必要)、もう1つをウィンドウ化します(同じブラウザーで最大4つ作成できます)。

こういうものを選べるようにしたいと思います。

<object id="plugin0" type="application/x-communication" width="0" height="0">
<param name="onload1" value="pluginLoaded" />

<object id="plugin1" type="application/x-canvas" width="320" height="240">
<param name="onload2" value="pluginLoaded" />

FB :: DOMを使用して通信オブジェクトから動的にキャンバスオブジェクトを作成し、JSAPIAUTOポインターを取得してそれらの間でバイナリデータを直接渡すことはできますか?

NpAPIはバイト配列をサポートしておらず、base64文字列を使用しようとしましたが、非常に低速です。

4

1 に答える 1

3

はい、単一の DLL に複数の「プラグイン」を含めることができます。実際には 1 つのプラグインにすぎませんが、複数の MIME タイプを処理できます。FBTestPlugin の例を見ると、実際には 3 つの異なる MIME タイプを処理していることがわかります。これらのプラグインはオプションで同じ JSAPI インターフェイスを共有できますが、それらはすべて同じメモリ空間にあるため、(慎重に!) グローバルを使用して情報を共有できます。

「キャンバス」オブジェクトが独自のプラグインのインスタンスであると仮定すると、ある種の識別子とグローバル マップを使用して値を他のプラグイン インスタンスに渡して、使用するメモリのブロックなどを伝えることができます。渡すことはできません。 javascript を介して JSAPI オブジェクトを相互にやり取りし、生の C++ オブジェクトを取得します (少なくともすべての場合ではありません) が、探しているものを見つけることができるように識別子を渡すことができます。

FBTestPlugin プロジェクトの firebreath リポジトリで、複数の MIME タイプのサポートを行う方法に関するメモを見つけることができます。これらの詳細の一部は後で変更される可能性がありますが、ここにも投稿します。


単一のコードベースで複数の MIME タイプをサポートするために、元の FBTestPlugin を次のように変更しました。

  1. PluginConfig.cmake を編集し、次のエントリに複数のエントリを追加します: FBSTRING_MIMEType、ACTIVEX_PROGID、FBControl_GUID、および FBSTRING_PluginDescription。FBControl_GUID の GUID を含め、すべてのエントリに一意の値を指定してください。

  2. Factory.cpp を編集し、PluginFactory::createPlugin() を変更し、MIME タイプをチェックして適切なオブジェクトを作成するコードを追加します。また、「boost::make_shared(mimetype)」にパラメータとして「mimetype」を追加します。新しいコードは、「標準」FBTestPlugin プラグイン、または FBTestPlugin または FBTestMathPlugin C++ オブジェクトから新しい「SimpleMath」プラグインを構築できます。

  3. FBTestPlugin.h で、FBTestPlugin コンストラクターを変更して、"const std::string& mimetype" を引数として受け取ります。「std::string m_mimetype;」を追加 FBTestPlugin へのプライベート変数として。

  4. FBTestPlugin.cpp で、FBTestPlugin コンストラクターを変更して、"const std::string& mimetype" を引数として受け取り、mimetype パラメーターから m_mimetype を設定します。createJSAPI() を変更して、mimetype に応じて "boost::make_shared(FB::ptr_cast(shared_from_this()), m_host)" ではなく "boost::make_shared(m_host)" を返すようにしました。「SimpleMath.h」を含めます。ユーザーへの視覚的なフィードバックのために、MIME タイプに応じて描画コードのプラグイン テキストを変更します。

  5. SimpleMathAPI.h と SimpleMathAPI.cpp を変更して、"self" プロパティと "GetSelf()" メソッドを追加します。どちらも shared_from_this() を返します。

  6. FBTestPlugin.* を FBTestMathPlugin.* にコピーし、オブジェクト名を変更します。LeakFinder を削除して FBTestMathPlugin を簡素化します。createJSAPI() を変更して、SimpleMathAPI オブジェクトのみを返すようにします。ユーザーへの視覚的なフィードバックのために、描画コードのプラグイン テキストを変更します。

  7. 複数の MIME タイプをテストするように、test.html のテスト コードを変更しました。3 つのプラグインを作成し、3 つすべてを使用して数学関数をテストします。

于 2013-01-12T19:28:25.377 に答える