2011-12-28 11 views
0

私はscritableプラグインを作成しようとしています。私は下のmozillaの例を私のガイドとして使っていますし、firebreathでコードをどのようにラップするのか見ています。私はjavascriptへの戻り値に立ち往生しています。 JavaScriptを割り当て私の関数を呼び出すとScriptable Plugin、Javascript returns undefined

Mozilla scriptable example

、HasProperty、HasMethodは、すべてが呼び出されます呼び出します。私はInvokeで結果を返し、javascript変数はで定義されていませんまたは結果を変更するときにブラウザがクラッシュします。

STRINGZ_TO_NPVARIANT(_strdup("Hello World"), *result); 

答えて

1

STRINGZ_TO_NPVARIANTは実際には危険です。文字列をNPVariantオブジェクトに入れると、そのメモリの所有権がブラウザに与えられます。しかし、NPN_MemAllocでそのメモリを割り当てなかった場合、メモリを解放しようとするとクラッシュする可能性があります。

STRINGZ_TO_NPVARIANTが実際に行っていることを見て、どのように動作するかを理解するまで使用しないでください。それまでは、手順を手作業で実行して理解を深めることができます。 NPN_MemAllocを使用してメモリを割り当て、文字列をstrcpyにします。私はこれであなたの問題が解決されるはずです。コードをもう一度クリーンアップするための独自のインライン関数やその他のものを構築したことが分かったら、

+0

応答のおかげで、私はすでにマクロを調べていましたが、マクロがどのように問題を抱えているかについて何か間違っています。しかし、ここで読んだら:[link](http://colonelpanic.net/2009/12/memory-management-in-npapi/)[/ link]あなたのコメントで私はNPN_MemAllocを使い、データを一時的な文字列にコピーしました。 '(TEMP = NPN_MemAlloc(strlenを( "Hello World" の)); のmemcpy(温度、 の "Hello World"、 はstrlen( "Hello World" の)); STRINGZ_TO_NPVARIANT(温度、 *結果);)' – hapyfishrmn