Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№127-05-2008 10:28:05

_KDA_
Участник
 
Группа: Members
Зарегистрирован: 13-05-2008
Сообщений: 10
UA: IE 7.0

Plugin и xpcom object

Возник такой вопрос. Пишу плагин на С++, нужно из плагина вернуть xpcom объект. Как это сделать и желательно в одном проекте??. Из xpcom объекта вернуть другой xpcom объект у меня получилось, но вот ищ плагина как то не очень. Как можно это сделать?? Спасибо.

Отсутствует

 

№227-05-2008 10:54:11

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Plugin и xpcom object

А кому вернуть-то ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№327-05-2008 14:09:31

_KDA_
Участник
 
Группа: Members
Зарегистрирован: 13-05-2008
Сообщений: 10
UA: IE 7.0

Re: Plugin и xpcom object

Вернуть тому, что будет использомать этот плагин.   

IDL:
[scriptable, uuid(A6B74332-9ADB-44c4-9C1A-B64F35B50324)]
interface IMyInterface: nsISupports {
   attribute string Name;
};

[scriptable, uuid(d2d536a0-b6fc-11d5-9d10-0060b0fbd8ac)]
interface nsIScriptablePluginSample : nsISupports {
  IMyInterface getMyInterface();
};

//native метод плагина, который возаращает IMyInterfase. Он нормально отрабатывает!!!
NS_IMETHODIMP nsScriptablePeer::GetMyInterface(IMyInterface **_retval)
{

    MyClass* cl = new MyClass();//MyClass - реализует интерфейс IMyInterface
    nsresult res = cl->QueryInterface(MyClass::GetIID(), (void**)&_retval);
    if (NS_FAILED(res))
    {
    return NS_ERROR_INVALID_POINTER;
    }
    return NS_OK;
}



//стороне  браузера
//вставляем плагин
<embed type="application/scriptable-plugin" width=600 height=40>


<script>
var embed = document.embeds[0];
var myI = embed.getMyInterface();
//в этом месте myI ровно null
alert(myI.Name);
</script>

Отсутствует

 

№427-05-2008 14:35:37

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Plugin и xpcom object

Вот мои предположения:

Modifications to Your Plug-in Code
...
3. A Scriptable instance object should be implemented in theplug-in.This class will
contain native methods callable from JavaScript. This class should also inherit
nsIClassInfo and implemen tits methods to be able to request all
from necessary privileges from the Mozilla security manager (see Example2.
Scriptable instance class).
4. Cases should be added to the plug-in implementation of NPP_GetValue for two
new scriptability additions to the NPPVariable enumeration type:
NPPVpluginScriptableInstance=10,
NPPVpluginScriptableIID=11

1. (3) м. б. скриптабельная компонента не реализует интерфейс nsIClassInfo ?
2. (4) и/или NPP_GetValue не возвращает IID скриптабельной компоненты ?

вот ещё ссылка: http://www.mozilla.org/projects/plugins/scripting-plugins.html

Отредактировано Anton (27-05-2008 14:36:11)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№527-05-2008 16:38:45

_KDA_
Участник
 
Группа: Members
Зарегистрирован: 13-05-2008
Сообщений: 10
UA: IE 7.0

Re: Plugin и xpcom object

Это конечно все верно, но это относится непосредственно к плагину, к которому у меня вопросов нет. Все определенные мной методы прекрасно вызываются из ява скрипта, другое дело, что у меня не получается вернуть другую xpcom компоненту.
т.е.
embed.getMyInterface() - вызывается, но не возвращается компонента.
Если написать просто компоненту и зарегестрировать ее как модуль:
....
static nsModuleComponentInfo components[] =
{
    {
       SPECIALTHING_CLASSNAME,
       SPECIALTHING_CID,
       SPECIALTHING_CONTRACTID,
       CSpecialThingConstructor,
    },
    {
        MYCLASS_CLASSNAME,
        MYCLASS_CID,
        MYCLASS_CONTRACTID,
        MyClassConstructor,
    }
};

NS_IMPL_NSGETMODULE("SpecialThingsModule", components)

то браузер все прекрасно знает об этих компонентах. Но в плагине так же  сделать нельзя, потому что это приложение совсем другого характера. Как мне сделать видимыми мои компоненты в плагине???

Отсутствует

 

№627-05-2008 17:07:21

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Plugin и xpcom object

Я понял, что я не понял с самого начала.

А если плагиновской библиотеке добавить дополнительную точку входа NsGetModule, движок отыщет её при регистрации компонент ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№728-05-2008 09:30:43

_KDA_
Участник
 
Группа: Members
Зарегистрирован: 13-05-2008
Сообщений: 10
UA: IE 7.0

Re: Plugin и xpcom object

Anton пишет

Я понял, что я не понял с самого начала.

А если плагиновской библиотеке добавить дополнительную точку входа NsGetModule, движок отыщет её при регистрации компонент ?

Вот, в том то и дело, что если добавить NSGetModule, по приложение даже не слинкуется. Или может руки кривые..., по крайней мере у меня не получилось добавить эту точку входа. Если бы все получилось, я думаю, что моего вопроса бы не возникло. Есть какие-нибудь идеи??

Отсутствует

 

№828-05-2008 13:21:17

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Plugin и xpcom object

Ну, не знаю. Разве что попробовать зарегистрировать компоненту при инициализации плагина, или когда попросит скрипт.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№928-05-2008 14:21:45

_KDA_
Участник
 
Группа: Members
Зарегистрирован: 13-05-2008
Сообщений: 10
UA: IE 7.0

Re: Plugin и xpcom object

Anton пишет

Ну, не знаю. Разве что попробовать зарегистрировать компоненту при инициализации плагина, или когда попросит скрипт.

Ооо, а это как?? Можно примерчик.

Отсутствует

 

№1028-05-2008 14:37:10

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Plugin и xpcom object

Иными словами - выполнить 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.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1128-05-2008 16:59:27

_KDA_
Участник
 
Группа: Members
Зарегистрирован: 13-05-2008
Сообщений: 10
UA: IE 7.0

Re: Plugin и xpcom object

Попробую, но по моему достичь желаемого результата не получится.:( А ты не пробывал так сделать... или делал ЛИБО плагин ЛИБО xpcom компоненту?  Или может их действительно разделить по приложениям. Сделать отдельно плагин и отдельно компоненту. В плагин подключить хидеры компоненты и как нить попробывать выкрутиться...

Добавлено Wed May 28 17:03:08 2008 :
..и еще вопросик появился. Какие типы можно использовать в idl? Можно там всякие структуры, перечисления, массивы и т.п. передавать и получать в качестве параметров? Нормального мануала по этому вопросу я так и не нашел, а хотелось бы знать по конкретнее.

Отсутствует

 

№1228-05-2008 18:35:39

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Plugin и xpcom object

А ты не пробывал так сделать

Только компоненты, только на js.

Вот так http://pastebin.mozilla-russia.org/91396 выглядит реализация registerSelf на js. Т. е., регистрируется она с помощью nsIComponentRegistrar, а у него кроме registerFactoryLocation есть ещё просто registerFactory. Так что почему бы не попробовать раз уж с NSGetModule не получается.

Какие типы можно использовать в idl

Простые типы, массивы и объекты с nsISupports. Вот:
http://developer.mozilla.org/en/docs/XPIDL
http://developer.mozilla.org/en/docs/XPConnect
если не попадались такие ссылки.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1329-05-2008 10:03:13

_KDA_
Участник
 
Группа: Members
Зарегистрирован: 13-05-2008
Сообщений: 10
UA: IE 7.0

Re: Plugin и xpcom object

Даа, не большой выбор. Но делать нечего, будем использовать то что есть. Буду ковыряться дальше. Большое спасибо за помощь.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]