DLL компонента XPCOM загружается в Firefox, но затем не может зарегистрировать свой класс - PullRequest
0 голосов
/ 23 июня 2011

У меня есть компонент XPCOM, исходный код которого при компиляции прекрасно работает в Linux, но не работает в Windows.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 хорошо регистрируется.

1 Ответ

0 голосов
/ 23 июня 2011

Глядя на nsNativeModuleLoader::LoadModule, зависимости здесь не проблема - если они не будут работать, то библиотека, в первую очередь, не загрузится, выгрузить некуда. Существует два условия, при которых библиотека будет выгружена: символ NSModule не определен или версия модуля не совпадает. Из вашего описания, первая проблема, это действительно должно быть NSModule, а не _NSModule. Поэтому я предполагаю, что вы используете что-то кроме макроса NSMODULE_DEFN(). См. http://mxr.mozilla.org/mozilla-central/source/xpcom/sample/nsSampleModule.cpp для примера правильного определения модуля. Если мое предположение неверно, пожалуйста, покажите нам ваш код определения модуля.

...