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

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

Разработка » Plugin и xpcom object » 29-05-2008 10:03:13

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

Разработка » Plugin и xpcom object » 28-05-2008 16:59:27

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

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

Разработка » Plugin и xpcom object » 28-05-2008 14:21:45

Anton пишет

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

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

Разработка » Plugin и xpcom object » 28-05-2008 09:30:43

Anton пишет

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

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

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

Разработка » Plugin и xpcom object » 27-05-2008 16:38:45

Это конечно все верно, но это относится непосредственно к плагину, к которому у меня вопросов нет. Все определенные мной методы прекрасно вызываются из ява скрипта, другое дело, что у меня не получается вернуть другую 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)

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

Разработка » Plugin и xpcom object » 27-05-2008 14:09:31

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

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>

Разработка » Plugin и xpcom object » 27-05-2008 10:28:05

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

Разработка » получение объектов из XPCom компоненты » 14-05-2008 12:15:04

Ну в общем мне кажется я разобрался с этим вопросом. Кому интересно, ответ тут
http://praveenmatanam.wordpress.com/200 … xpconnect/

Разработка » получение объектов из XPCom компоненты » 13-05-2008 16:58:23

Anton пишет

Могу предположить только, что cl->QueryInterface не возвращает требуемый объект.

Я подключился дебагером, и посмотрел, что там происходит.
После выполнения это й строчки
nsresult res = cl->QueryInterface(kIMyInterfaceIID, (void**)&_retval);
в _retval, вроде расположено то что нужно. Т.е. там написано, что то типа: здесь лежит адрес, по котрому расположен объек типа MyClass. Все нормально. По крайней мере когда я писал ActivеX, при выполнении подобного кода никаких проблем не было. 

Макрос NS_DECL_IMYINTERFACE определяет метод QueryInterface или только прототип ?

Нет, этот макрос определяет прототипы функций, которые описаны непосредственно в итнерфейсе, а QI, addRef и Release определяет макрос NS_DECL_ISUPPORTS. А макрос NS_IMPL_ISUPPORTS1(MyClass, IMyInterface), определяет реализацию этих трех функций. Весь этот код генерится утилитой xpidl. Все родное.

Разработка » получение объектов из XPCom компоненты » 13-05-2008 16:12:53

Появился такой впорос, точнее непонимание. Существует xpcom кокпонент написанный на С++. Как я понимаю в idl файле можно описать множество интерфейсов и сделать столько же классов, которые будут реализовывать эти интерфейсы. В чем собственно проблема: как получить экземпляр класса(интерфеса) на JavaScript. Поясню примером:

есть описание интерфейсов
[scriptable, uuid(74A013CC-1AE3-4974-9856-FEF649C1BBFA)]
interface IMyInterface: nsISupports {
    attribute string Name;
};

[scriptable, uuid(263ed1ba-5cc1-11db-9673-00e08161165f)]
interface ISpecialThing : nsISupports //это собственно и есть компанента
{
   IMyInterface getMyInterface();
};


есть класс реализуйщий IMyInteface:

class MyClass: public IMyInterface
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_IMYINTERFACE

  MyClass();
  virtual ~MyClass();
  char* name;
};


и собственно функция, которая пытается вернуть ява сркрипту объект MyClass. Что то в этом роде:

NS_IMETHODIMP CSpecialThing::GetMyInterface(IMyInterface **_retval)
{
   

Board footer

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