2011-06-22 34 views
0

我有一個XPCOM組件,其源代碼在編譯時,在Linux上正常工作,但在Windows上無法正常工作。由於依賴walker程序顯示,該DLL顯然按照Firefox的預期加載,但似乎永遠不會被它執行。XPCOM組件DLL加載到Firefox中,但未能註冊其類。

這是我使用的編譯所有的命令行:

[4/5] cxx: components\nsSoundSubsystem.cpp -> build\components\nsSoundSubsystem.cpp.2.o 
15:44:31 runner ['C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\BIN\\CL.exe', '/nologo', '/MT', '/IE:\\src\\chunder\\clients\\xpcomextension\\build', '/IE:\\src\\chunder\\clients\\xpcomextension', '/IE:\\src\\chunder\\clients\\xpcomextension\\build\\components', '/IE:\\src\\chunder\\clients\\xpcomextension\\components', '/IC:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\INCLUDE', '/IC:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\include', '/Ic:\\xulrunner-sdk\\include', '/DHAVE_XPCOM_CONFIG_H=1', '/DMOZ_NO_MOZALLOC', '/DWIN32', '/D_WINDOWS', '/D_USRDLL', '/DXP_WIN', '/DXP_WIN32', '/DXPCOM_GLUE_USE_NSPR', '..\\components\\nsSoundSubsystemModule.cpp', '/FC', '/c', '/Focomponents\\nsSoundSubsystemModule.cpp.2.o'] 
15:44:31 runner ['C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\BIN\\CL.exe', '/nologo', '/MT', '/IE:\\src\\chunder\\clients\\xpcomextension\\build', '/IE:\\src\\chunder\\clients\\xpcomextension', '/IE:\\src\\chunder\\clients\\xpcomextension\\build\\components', '/IE:\\src\\chunder\\clients\\xpcomextension\\components', '/IC:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\INCLUDE', '/IC:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\include', '/Ic:\\xulrunner-sdk\\include', '/DHAVE_XPCOM_CONFIG_H=1', '/DMOZ_NO_MOZALLOC', '/DWIN32', '/D_WINDOWS', '/D_USRDLL', '/DXP_WIN', '/DXP_WIN32', '/DXPCOM_GLUE_USE_NSPR', '..\\components\\nsSoundSubsystem.cpp', '/FC', '/c', '/Focomponents\\nsSoundSubsystem.cpp.2.o'] 
nsSoundSubsystem.cpp 
nsSoundSubsystemModule.cpp 
[5/5] cxxshlib: build\components\nsSoundSubsystemModule.cpp.2.o build\components\nsSoundSubsystem.cpp.2.o -> build\components\chunder_x86.dll build\components\chunder_x86.dll.manifest build\components\chunder_x86.lib 
15:44:32 runner ['C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\BIN\\LINK.exe', 'components\\nsSoundSubsystemModule.cpp.2.o', 'components\\nsSoundSubsystem.cpp.2.o', '/OUT:E:\\src\\chunder\\clients\\xpcomextension\\build\\components\\chunder_x86.dll', '/LIBPATH:C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\LIB', '/LIBPATH:C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\lib', '/LIBPATH:c:\\xulrunner-sdk\\lib', 'xpcom.lib', 'xpcomglue_s_nomozalloc.lib', 'nspr4.lib', '/NOLOGO', '/MANIFEST', '/DLL', '/machine:I386', '/IMPLIB:components\\chunder_x86.lib'] 
    Creating library components\chunder_x86.lib and object components\chunder_x86.exp 
15:44:33 runner ['C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\bin\\MT.exe', '/NOLOGO', '-manifest', 'E:\\src\\chunder\\clients\\xpcomextension\\build\\components\\chunder_x86.dll.manifest', '-outputresource:E:\\src\\chunder\\clients\\xpcomextension\\build\\components\\chunder_x86.dll;2'] 

我在我束手無策,這個場三天。

我在做什麼錯?或者,我能做些什麼來幫助我調試問題?

附加信息:我正在使用Firefox 4運行該模塊,並使用XULrunner 2.0 SDK來編譯該模塊。從XPT文件的接口註冊自己就好了。

+0

其他信息: [732140]:加載庫C:\用戶\拉德-O \應用程序數據\漫遊\ Mozilla的\火狐\概況\ hob5ycuo.default的模塊加載,然後根據火狐NSPR日誌立即卸載\ extensions \ [email protected] \ components \ chunder_x86.dll(加載庫) [732140]:卸載庫C:\ Users \ Rudd-O \ AppData \ Roaming \ Mozilla \ Firefox \ Profiles \ hob5ycuo.default \ extensions \ [email protected] \ components \ chunder_x86.dll –

+0

附加信息:DLL使用dumpbin/exports顯示NSModule入口點= _NSModule –

+0

提交的問題:https://bugzilla.mozilla.org/show_bug.cgi?id = 666450 –

回答

0

看着nsNativeModuleLoader::LoadModule,依賴關係在這裏不是問題 - 失敗的依賴關係會導致庫無法首先加載,因此不會有任何要卸載的東西。有兩種情況下庫將被卸載:符號NSModule未定義或模塊版本不匹配。從你的描述來看,前者是問題,它應該是NSModule而不是_NSModule。所以我猜你正在使用宏以外的其他東西。有關正確模塊定義的示例,請參閱http://mxr.mozilla.org/mozilla-central/source/xpcom/sample/nsSampleModule.cpp。如果我的猜測不正確,請向我們展示您的模塊定義代碼。

+0

符號NSModule被定義爲_NSModule。它適用於Linux。想法? –

+0

這是在代碼中:NSMODULE_DEFN(nsSoundSubsystemModule)=&kSoundSubsystemModule; –

+0

我*使用有問題的宏def。 :-( –