>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Работа с DLL библиотекой из под XULRUNNER http://forum.mozilla-russia.org/viewtopic.php?id=51842 |
YuryL > 08-10-2011 14:30:20 |
Здравствуйте, |
hydrolizer > 08-10-2011 14:39:25 |
YuryL пишет
Нет. FF понятия не имеет ни про какой ActiveX, т.к. ActiveX - это специфика Microsoft. Поэтому - да, только XPCOM-компонент на C++. Теоретически еще можно делать вызовы через js-ctypes, но, по моему скромному, это совсем не более простой способ (и работать в сишном стиле через ctypes-прослойку с ActiveX я не пожелаю и врагу). |
YuryL > 14-10-2011 19:49:05 |
Большое спасибо, |
hydrolizer > 15-10-2011 06:48:35 |
YuryL |
tenshi > 15-10-2011 16:41:30 |
https://developer.mozilla.org/en/Gecko_FAQ#Are_Gecko's_APIs_based_on_ActiveX.3F_COM.3F_JavaBeans.3F |
YuryL > 16-10-2011 03:35:11 |
Спасибо, это тоже смотрел. |
hydrolizer > 16-10-2011 04:54:08 |
YuryL пишет
У VS2010 - без разницы, express, или не express - весь интерфейс сделан на WPF. А это самый что ни на есть .Net. |
YuryL > 24-10-2011 01:44:20 |
пытался откомпилировать различные найденные мной в инете примеры, но так и не получилось. |
hydrolizer > 24-10-2011 03:17:30 |
YuryL пишет
Версия сишных рантаймов здесь дело пятое. У этого СДК особенность в другом: то, что вы соберете в связке с ним, не будет работать на FF4.0 и выше. Потому что неприятная особенность XPCOM-компонентов после выхода 4-й версии заключается в следующем:
FF4.0 - это xulrunner 2.0, в более поздних версиях номер версии xulrunner соответствует версии FF (https://developer.mozilla.org/en/Gecko_SDK#Downloading) YuryL пишет
а можно ссылку на эти примеры? |
YuryL > 24-10-2011 18:14:02 |
взял пример по вашей ссылке, он для версии Gecko 1.8.
уже не содержится в xulrunner-sdk 7.0 . Я нашел в инете на что его заменить. пробовал также пример из https://developer.mozilla.org/en/Modularization_Techniques остальные примеры что я нашел также содержат
Компилятор VS 2010 c++ для меня новый, последний раз писал на С лет 5 назад(VS C++ 6.0). Сейчас буду пробовать на работе VS установить. |
hydrolizer > 25-10-2011 08:46:38 |
YuryL пишет
Ну там как бы и написано, что содержимое могло сильно устареть, т.к. последний раз изменялось в 2004-м году |
hydrolizer > 29-10-2011 05:25:37 |
Как обещал ранее, вот проект тестового XPCOM-компонента, и расширения к нему: http://xp-dev.com/svn/xpcom-test/trunk/ Сначала - настройка среды. На компьютере, помимо MS Visual Studio, должен быть Win32 platform SDK, C/C++ runtime libraries, и, разумеется, xulrunner SDK. (я переименовал папку с xullrunner SDK в gecko-sdk - так предлагалось сделать в каком-то примере, который я нашел в инете - с тех пор так и осталось).
Configuration properties > C/C++ > Language > Treat Wchar_t as built-in type: No (/Zc:wchar_t-) Configuration properties > C/C++ > Preprocessor > Preprocessor definitions: WIN32;_WINDOWS;_USRDLL;XP_WIN;XP_WIN32;MOZ_NO_MOZALLOC;%(PreprocessorDefinitions) Configuration properties > Linker > General > Additional Library directories: ..\gecko-sdk\lib;%(AdditionalLibraryDirectories) Configuration properties > Linker > Input > Additional dependencies: nspr4.lib;xpcom.lib;xpcomglue_s_nomozalloc.lib; (всё это уже задано в файле проекта по ссылке выше). Далее. Отправная точка - idl-файл. Это описатель интерфейса на диалекте IDL - XPIDL. По нему с помощью xpidl.exe генерируем интерфейсный файл .xpt (библиотека типа; содержит только информацию о контракте компонента), и интерфейсный хидер. Вот пример bat-файла, который выполняет оба эти действия сразу: ..\gecko-sdk\bin\xpidl.exe -m header -I..\gecko-sdk\idl %1 Все следующие шаги делались по образу и подобию того примера, о котором я упоминал выше. После того, как нужные файлы были сгенерены, делаем хидер для реализации класса c объявлением в нем CID'a и contract id компонента. Далее пишем реализацию модульной части для nsIClassInfo. В последнюю очередь приступаем к написанию реализации класса. В тестовом проекте:
nsIXPCOMTest.h - интерфейсный хидер nsXPCOMTest.h - хидер для реализации класса nsXPCOMTestModule.cpp - реализация модульной части для nsIClassInfo nsXPCOMTest.cpp - реализация класса. После этого можно компилировать. Если скомпилировалось успешно - делаем расширение для класса. Расширение тоже очень простое, но ввиду наличия компонента имеет некоторые нюансы: 1) в chrome.manifest нужны такие объявления: interfaces components/nsIXPCOMTest.xpt - объявляем интерфейсный файл binary-component platform/WINNT_x86-msvc/xpcom-test.dll ABI=WINNT_x86-msvc - объявляем бинарник с компонентом. В принципе, положить его можно куда угодно, но путь, приведенный выше (с указанием ABI в пути) - де-факто стандарт. 2) Обязательно в install.rdf надо указать <em:unpack>true</em:unpack> - бинарный компонент должен быть распакован при инсталляции расширения, иначе Firefox его не увидит. 3) Ввиду пункта 2, надо будет запаковать содержимое папки chrome в jar, и в chrome.manifest соответствующим образом указать пути к частям расширения внутри этой папки. Практически это всё. Инстанциирование и вызов методов компонента стандартный: Выделить код Код:var xtest=Components.classes["@mozilla.org/xpcomtest;1"].createInstance(); var answer=xtest.sayTest(..... Расширение с компонентом, скомпилированным под xulrunner 8.0 (еще раз напоминаю - с другими версиями скомпилированный компонент работать не будет) лежит здесь: http://xp-dev.com/svn/xpcom-test/trunk/xpcom-test.xpi. |
YuryL > 30-10-2011 01:49:08 |
спасибо большое, hydrolizer!!! |
YuryL > 30-10-2011 12:37:20 |
Ура!! заработало!! нашел еще, видимо, актуальные примеры в исходниках Firefox. >>писал ночью, почему-то не отправилось(не отправил)<<
система запланирована как "глобальная")) |
hydrolizer > 13-10-2012 03:38:29 |
Сегодня при попытке собрать проект под 17-ю версию xulrunner посыпались многочисленные ошибки. В ходе разбирательств было выяснено, что причина ошибок - в интерфейсном хидере, который был ранее сгенерирован с помощью xpidl.exe; также было выяснено, что в 17-й версии SDK нет этого xpidl.exe - начиная с 9-й версии для генерации хидера и библиотеки типа нужно использовать питоновские скрипты. Располагаются эти скрипты в папке sdk\bin самого SDK. Пример использования: ..\xulrunner-sdk\sdk\bin\header.py -I..\xulrunner-sdk\idl\ -o nsIXPCOMTest.h nsIXPCOMTest.idl Подробнее см. здесь. После перегенерации всё собралось нормально - т.е. в общем случае для каждого релиза xulrunner нужно делать перегенерацию этих файлов. |
hydrolizer > 13-01-2013 08:10:18 |
И еще новости об изменениях в процессе сборки. Для сборки с xulrunner sdk версии 19.0 в настройке проекта Configuration properties > C/C++ > General > Additional include directories помимо папки xulrunner-sdk\include нужно дополнительно указать папку xulrunner-sdk\include\nspr - без этого компиляция рванет. |