Я надеялся, что кто-то предоставит полный список того, что следует изменить, чтобы заставить его работать с более поздними гекконами, но, поскольку никто этого не сделал, я попытаюсь сделать это сам, используя этот примерЯ только что нашел.
xpidl.exe
Я не знаю, изменилось ли это или нет, так что это может быть необязательно.В Gecko 11 нет xpidl.exe. Решение для этого: Филип Чи
Он был заменен скриптом Python.Вы можете продолжить использовать XPIDL из Gecko 7.0 SDK или скомпилировать его из исходного кода, или использовать скрипт Python.
Gecko 7.0 можно загрузить с ftp HERE .Это действительно имеет xpidl.exe.Использование такое же, как в примере
Реализация компонентного модуля
Похоже, что он сильно изменился. Ссылка в MDN и другая ссылка (которая восходит к образцу, приведенному сверху, но объясняет материал).
Обратите внимание, что nsIGenericFactory.h былудален.Ссылки на nsIGenericFactory.h должны быть заменены на mozilla / ModuleUtils.h
В пример проекта также добавлено #include "nsIClassInfoImpl.h"
.
Теперь самый большой шаг - изменить NS_IMPL_NSGETMODULE
(который также удален) и объявление components
, которое используется этим для всей связки, найденной в примере модуля .Вы можете использовать объявление components
для справки, я немного помог.
Единственное, что вам не нужно из этого примера, это объявление и использование kSampleCategories
.Просто замените его на NULL
.По крайней мере, это то, что Бенджамин Смедберг сказал .
Константа kNS_SAMPLE_CID
должна быть заменена на kYOUR_CID_CONSTANT
.Просто добавьте к имени константы CID.
Эта последняя строка:
NS_IMPL_MOZILLA192_NSGETMODULE(&kSampleModule)
необходима только для совместимости с Gecko 1.9.Поскольку Firefox 3.5 использует это, я думаю, что я оставлю это.
Реализация компонента (CompImpl.cpp)
Ссылка от sample .
- Добавьте строку
NS_IMPL_CLASSINFO...
(в примере это строка 80) - Замените
NS_IMPL_ISUPPORTS1
на NS_IMPL_ISUPPORTS1_CI
В этом примере есть куча хорошихпримеры того, как использовать значения ввода / вывода.Если вы хотите использовать char *, вам также нужно использовать nsMemory.Я думаю, что для nsStrings это не нужно.
Вот и мы, куча ошибок связывания с __imp__moz_xmalloc
.Эта небольшая, действительно трудная для поиска статья помогла избавиться от них:
Начиная с XULRunner 2.0, зависимый от фиксированного связывания клей (xpcomglue_s.lib в Windows, libxpcomglue_s.a в Linux и Mac)зависит от новых непогрешимых процедур выделения памяти (mozalloc).Поскольку эти подпрограммы не существовали до XULRunner 2.0, компоненты XPCOM, которые связываются с зависшим связующим клеем, не будут совместимы с приложениями XULRunner до версии 2.0.
Решение состоит в том, чтобы вместо этого связываться с xpcomglue_s_nomozalloc (xpcomglue_s_nomozalloc.lib в Windows, libxpcomglue_s_nomozalloc.a в Linux и Mac).Эта библиотека является новой в XULRunner 2.0 и идентична xpcomglue_s, за исключением того, что она скомпилирована без mozalloc.Просто измените все ссылки на «xpcomglue_s» в флагах компилятора и компоновщика на «xpcomglue_s_nomozalloc».Результирующие компоненты XPCOM больше не будут зависеть от mozalloc и, следовательно, будут совместимы с приложениями XULRunner до версии 2.0.
Комментарий: вам также может понадобиться построить ваш компонент с флагом MOZ_NO_MOZALLOC (-DMOZ_NO_MOZALLOC)
И, наконец, ошибки нет