2009-09-01 8 views
1

私はC++でXPCOMコンポーネントWRITENを呼び出し、私はこのエラーを取得するFirefox用拡張機能開発しています:私はJavaスクリプトからこのコードを実行しようとするとNS_ERROR_XPC_GS_RETURNED_FAILUREエラーコード

[Exception... "Component returned failure code: 0x80570016 
(NS_ERROR_XPC_GS_RETURNED_FAILURE) [nsIJSCID.getService]" nsresult: "0x80570016 
(NS_ERROR_XPC_GS_RETURNED_FAILURE)" location: "JS frame :: 
chrome://testtest/content/mytest.js :: loadTestPage :: line 128" data: no] 

を:

cid = '@myCompany.com/MyComponent;1'; 
obj = Components.classes[cid].getService(Components.interfaces.IMyComponent); 

誰でもこのエラーコードが何を意味するのか知っていますか?

このエラーは、動作している他のプラットフォーム上で、FF 3.5.2(公式ビルド32ビット、FFを再インストールして新しいプロファイルを作成した後でも)を実行しているVista(x86およびx64の両方) XPCOMコンポーネントはVisual C++ 2008(sp1)でコンパイルされます。

compreg.datとxpti.datを削除しようとしましたが動作しません。新しいプロファイルを作成してから再度拡張機能をインストールしようとしましたが、同じエラーが表示されます。

私は、Firefoxが私のXPCOMコンポーネントを正常に読み込み、そのコンポーネントが動作していることを知っています。なぜなら、私はjavascriptで書かれた別のコンポーネントからアクセスして使用できるからです。

エラーコンソールからの評価も機能します。

式:

Components.classes['@myCompany.com/MyComponent;1'].getService(
    Components.interfaces.IMyComponent); 

リターン:

[xpconnect wrapped IMyComponent] 

ありがとう!

答えて

1

エラーは、コンポーネントがgetService呼び出し中に投げたことを意味します。

+0

C++ XPCOM compontenは、別のJSコンポーネントからも呼び出され、機能しますが、拡張からは失敗し続けます。これは、Vista OSとFF 3.5.2を実行するいくつかのマシンでのみ発生します(FFが再インストールされ、新しいプロファイルでも)。また、私は評価しようとしました:Components.classes ['@ myCompany.com/MyComponent;1'].getService(Components.interfaces.IMyComponent)エラーコンソールからの式とそれが動作します(エラーコンソールのメッセージは[xpconnect wrapped IMyComponent]) おかげさまで –

+0

これは、再帰的なサービスの負荷に対しても発生します。コンポーネント上でgetServiceを再帰的に呼び出す可能性があります。 – sdwilsh

3

コンポーネント登録の途中で.getServiceを呼び出そうとしている可能性もあります。登録されていないか、まだ完全に利用可能でない可能性があるため、登録時に外部コンポーネントを作成しないでください。