2009-09-01 16 views
1

我正在開發Firefox擴展它調用XPCOM組件writen C++和我得到這個錯誤:當我嘗試執行從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); 

有人知道這個錯誤代碼的含義嗎?

在運行Vista 3.5(32位官方版本,即使在重新安裝FF並創建新配置文件後)運行Vista(包括x86和x64)的少數機器上,該錯誤僅在其工作的其他平臺上發生。使用Visual C++ 2008(sp1)編譯XPCOM組件。

我試圖刪除的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包裹IMyComponent]) 謝謝。 – 2009-09-03 14:07:25

+0

它也可能發生遞歸服務負載。您可能會遞歸地在組件上調用getService。 – sdwilsh 2009-09-03 17:43:38

3

當您仍處於組件註冊過程中時,您也可能試圖調用.getService。您不應該在註冊期間嘗試創建任何外部組件,因爲它們可能尚未註冊或完全可用。