>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >получение объектов из XPCom компоненты http://forum.mozilla-russia.org/viewtopic.php?id=23126 |
_KDA_ > 13-05-2008 16:12:53 |
Появился такой впорос, точнее непонимание. Существует xpcom кокпонент написанный на С++. Как я понимаю в idl файле можно описать множество интерфейсов и сделать столько же классов, которые будут реализовывать эти интерфейсы. В чем собственно проблема: как получить экземпляр класса(интерфеса) на JavaScript. Поясню примером: есть описание интерфейсов [scriptable, uuid(263ed1ba-5cc1-11db-9673-00e08161165f)] есть класс реализуйщий IMyInteface: class MyClass: public IMyInterface MyClass(); и собственно функция, которая пытается вернуть ява сркрипту объект MyClass. Что то в этом роде: NS_IMETHODIMP CSpecialThing::GetMyInterface(IMyInterface **_retval) Вот что получается на JavaScript var myClass = obj.getMyInterface(); //после вызова этой функции объект myClass равен null!!??!?!?! Что я не правильно сделал? Или это делается как то по другому?? |
Anton > 13-05-2008 16:36:56 |
Могу предположить только, что cl->QueryInterface не возвращает требуемый объект. Макрос NS_DECL_IMYINTERFACE определяет метод QueryInterface или только прототип ? |
_KDA_ > 13-05-2008 16:58:23 |
Anton пишет
Я подключился дебагером, и посмотрел, что там происходит.
Нет, этот макрос определяет прототипы функций, которые описаны непосредственно в итнерфейсе, а QI, addRef и Release определяет макрос NS_DECL_ISUPPORTS. А макрос NS_IMPL_ISUPPORTS1(MyClass, IMyInterface), определяет реализацию этих трех функций. Весь этот код генерится утилитой xpidl. Все родное. |
_KDA_ > 14-05-2008 12:15:04 |
Ну в общем мне кажется я разобрался с этим вопросом. Кому интересно, ответ тут |