Здравствуйте,

Подскажите, как в XPI добавить XPCOM и DLL, которую использует этот XPCOM, чтобы при установке зарегистрировался XPCOM, а DLL стала доступна XPCOM'у.

Спасибо.

Наряду с папкой chrome нужно создать папку components (в корне xpi-архива). А затем в нее положить саму xpcom-компоненту (.dll, .so) и (если она еще реализует пользовательские интерфейсы, то и библиотеку типов (файл .xpt)). В таком варианте компонента будет автоматически зарегестрирована при установке расширения.

ок, сам компонент регистрируется и работает.
что мне необходимо сделать, чтобы third party dll, который в компоненте подгружается через LoadLibrary() оказался в том месте, в котором его найдет ff3?
в profiles/xxx/extensions/zzz/components/ он его не находит.

спасибо.

Есть два варианта:

1) Указать абсолютный путь. Лучше всего грузить с помощью LoadLibraryEx с флагом LOAD_WITH_ALTERED_SEARCH_PATH. В таком случае не будет проблем, если сторонняя библиотека будет статически связана еще с какими при условии, что все они находятся в одной директории. Но функция доступна начиная с Wndows 2000.

2) Разместить стороннюю библиотеку по одному из путей доступных системе. Для Windows XP SP2 это:
  1. Директория в которой находиться приложение (firefox.exe).
  2. Текущая директория (можно переустановить с помощью SetCurrentDirectory).
  3. Системная директория.
  4. 16-битная системная директория.
  5. Директория Windows.
  6. Директории указанные в системной переменной PATH.

Firefox, очевидно не использует LoadLibraryEx с флагом LOAD_WITH_ALTERED_SEARCH_PATH для загрузки XPCOM-компонент, поэтому и не может найти dll в components профиля.

да. уже сделал с помощью абсолютного путя, доставаемого через IExtensionManager и IInstallLocation.