>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Plugin и xpcom object http://forum.mozilla-russia.org/viewtopic.php?id=23455 |
_KDA_ > 27-05-2008 10:28:05 |
Возник такой вопрос. Пишу плагин на С++, нужно из плагина вернуть xpcom объект. Как это сделать и желательно в одном проекте??. Из xpcom объекта вернуть другой xpcom объект у меня получилось, но вот ищ плагина как то не очень. Как можно это сделать?? Спасибо. |
Anton > 27-05-2008 10:54:11 |
А кому вернуть-то ? |
_KDA_ > 27-05-2008 14:09:31 |
Вернуть тому, что будет использомать этот плагин. IDL: [scriptable, uuid(d2d536a0-b6fc-11d5-9d10-0060b0fbd8ac)] //native метод плагина, который возаращает IMyInterfase. Он нормально отрабатывает!!! MyClass* cl = new MyClass();//MyClass - реализует интерфейс IMyInterface //стороне браузера <script> |
Anton > 27-05-2008 14:35:37 |
Вот мои предположения:
1. (3) м. б. скриптабельная компонента не реализует интерфейс nsIClassInfo ? вот ещё ссылка: http://www.mozilla.org/projects/plugins/scripting-plugins.html |
_KDA_ > 27-05-2008 16:38:45 |
Это конечно все верно, но это относится непосредственно к плагину, к которому у меня вопросов нет. Все определенные мной методы прекрасно вызываются из ява скрипта, другое дело, что у меня не получается вернуть другую xpcom компоненту. NS_IMPL_NSGETMODULE("SpecialThingsModule", components) то браузер все прекрасно знает об этих компонентах. Но в плагине так же сделать нельзя, потому что это приложение совсем другого характера. Как мне сделать видимыми мои компоненты в плагине??? |
Anton > 27-05-2008 17:07:21 |
Я понял, что я не понял с самого начала. А если плагиновской библиотеке добавить дополнительную точку входа NsGetModule, движок отыщет её при регистрации компонент ? |
_KDA_ > 28-05-2008 09:30:43 |
Anton пишет
Вот, в том то и дело, что если добавить NSGetModule, по приложение даже не слинкуется. Или может руки кривые..., по крайней мере у меня не получилось добавить эту точку входа. Если бы все получилось, я думаю, что моего вопроса бы не возникло. Есть какие-нибудь идеи?? |
Anton > 28-05-2008 13:21:17 |
Ну, не знаю. Разве что попробовать зарегистрировать компоненту при инициализации плагина, или когда попросит скрипт. |
_KDA_ > 28-05-2008 14:21:45 |
Anton пишет
Ооо, а это как?? Можно примерчик. |
Anton > 28-05-2008 14:37:10 |
Иными словами - выполнить registerSelf модуля, т. е., зарегистрировать фабрику. Порылся в гугле, вот здесь http://groups.google.com/group/netscape.public.mozilla.oji/browse_thread/thread/3bc3e20b7c535540/df7e5428ca4a4b31?lnk=st&q=I+don%27t+know+what+regxpcom+is#df7e5428ca4a4b31 упоминаются плагин и xpcom ("This will register the plugin as a component..."), но там вроде всё стандартно, через NSGetModule. |
_KDA_ > 28-05-2008 16:59:27 |
Попробую, но по моему достичь желаемого результата не получится. А ты не пробывал так сделать... или делал ЛИБО плагин ЛИБО xpcom компоненту? Или может их действительно разделить по приложениям. Сделать отдельно плагин и отдельно компоненту. В плагин подключить хидеры компоненты и как нить попробывать выкрутиться... Добавлено Wed May 28 17:03:08 2008 : |
Anton > 28-05-2008 18:35:39 |
Только компоненты, только на js. Вот так http://pastebin.mozilla-russia.org/91396 выглядит реализация registerSelf на js. Т. е., регистрируется она с помощью nsIComponentRegistrar, а у него кроме registerFactoryLocation есть ещё просто registerFactory. Так что почему бы не попробовать раз уж с NSGetModule не получается.
Простые типы, массивы и объекты с nsISupports. Вот: |
_KDA_ > 29-05-2008 10:03:13 |
Даа, не большой выбор. Но делать нечего, будем использовать то что есть. Буду ковыряться дальше. Большое спасибо за помощь. |