0

これが私がjavascriptからやろうとしていることです:

var result;
result = document.myplugin.GetClientName();
document.write(result);

「GetClientName」は、NPVariant を文字列でブラウザーに返す必要があります。最後にガベージが追加された出力を取得しています。

この問題を解決する方法について何か提案はありますか?

4

1 に答える 1

2

うーん... 正しくですか?サンプルコードを提供しておらず、NPVariant をどのように割り当てているかを説明していません。それはあなたを助けるのを本当に難しくしています、私の友人。

基本的には、NPVariant を作成し、 NPN_MemAlloc を使用して十分なメモリを割り当て、NPVariant ユニオン内の NPString の UTF8Characters フィールドにポインタを割り当て、UTF8Length に長さを割り当てるだけです

必ずメモリを割り当て、文字列をコピーしてください。std::string などからメモリに渡そうとすると、使用する前に解放される可能性が高く、問題が発生しやすくなります。また、文字列の末尾に NULL 文字用の余分なバイトを割り当てることを忘れないでください。C 文字列は NULL で終了することに注意してください。NPAPI 仕様では、UTF8Length を設定するだけでよいと書かれていますが、Firefox で特に、NULL で終了する文字列が必要であり、文字列を指定しないと奇妙な動作をします。

このルートを使用する場合は、次のブログ投稿が役立つ場合があります。

ただし、より簡単なルートを提案できますか?NPAPI プラグインを作成するのは簡単なことではありません。適切かつ安全に作成するには、多くの経験と調査が必要です。FireBreathを使用する場合、C++ フレームワーク上で NPAPI プラグインを作成できます。このフレームワークは、既にこれらすべてを実行しており、通常の C++ STL データ型を使用でき、複数のプラットフォームで動作し、通常は時間と手間を大幅に節約できます。

スクリプトで FireBreath が使用するアプローチの詳細については、このテーマに関する私のブログ投稿を参照してください。

于 2011-03-08T06:59:34.063 に答える