try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const cid = "@starkravingfinkle.org/specialthing;1";
var obj = Components.classes[cid].createInstance();
obj = obj.QueryInterface(Components.interfaces.ISpecialThing);
// на этой строчке получаю исключение: NS_ERROR_XPC_BAD_CONVERT_JS_NULL_REF
//(NULL can not be used for a c++ reference type)
}
catch (err) {
alert(err);
return;
}
var res = obj.add(3, 4);
alert('3+4 = ' + res);
var name = obj.name;
alert('Name = ' + name);
obj.name = 'New Name';
name = obj.name;
alert('Name = ' + name);
что это за исключение, почему и как с ним бороться?
У меня стоит:
gecko-sdk-win32-msvc-1.8.0.4.zip
firefox 1.5
Visual Studio 2005
Попутно пара вопросов:
1. Нужно организовать функцию Init и подгрузить пару библиотек. Как это сделать?
2. Сделаю некоторую ф-цию: DoSomth, во время выполнения которой небходимо реализовать прогресс бар, с возможностью прервать операцию. как это сделать?
26.04.08 22:34: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Помогите с XPCOM
От:
Аноним
Дата:
02.10.07 02:13
Оценка:
Не уж-то никто не в курсе? я задолбался уже
По каким мануалам только не делал-одна фигня.... Может дело в том, что sdk под win32, а у меня 64??
Re: Помогите с XPCOM
От:
Аноним
Дата:
04.10.07 03:27
Оценка:
Замучался уже...
var obj = Components.classes[cid].createInstance();
здесь все нормально. Встаю отладчиком, конструктор вызывается — все гуд.
obj = obj.QueryInterface(Components.interfaces.ISpecialThing);
здесь падаем... опять этот нул.... в чем может быть дело?
Re[2]: Помогите с XPCOM
От:
Аноним
Дата:
04.10.07 04:29
Оценка:
сделал так:
var obj = Components.classes[cid].createInstance();
alert(Components.interfaces.ISpecialThing);
Здравствуйте, Аноним, Вы писали:
А>Не уж-то никто не в курсе? я задолбался уже
Нет. Просто народ в шоке — C++ просто не узнать. Минут десять думал, что это — C++ или C# следующей версии, только потом по одинарным кавычкам дошло, что это JavaScript.
А>По каким мануалам только не делал-одна фигня.... Может дело в том, что sdk под win32, а у меня 64??
Для начала поставь Firefox расширение XPCOMViewer и убедись, что нужные тебе интерерфейсы торчат из компонента.
-- Андрей
Re[4]: Помогите с XPCOM
От:
Аноним
Дата:
04.10.07 07:03
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали: АК>Для начала поставь Firefox расширение XPCOMViewer и убедись, что нужные тебе интерерфейсы торчат из компонента.
Моего интерфейса нет, есть только тыШЫгззщкеы
Собрал пример.... В чем может быть дело?
Re[5]: Помогите с XPCOM
От:
Аноним
Дата:
04.10.07 07:14
Оценка:
Все решилось гораздо проще!
Я сам, тупица, вместо *.xpt клал в компоненты *.exp
Остается один актульный вопрос: Делаю кнопку, накоторую вешаю ява скрипт. Ява скрипт из моего интерфейса дергает функцию из моего интерфейса, как мне реализовать прогресс бар с возможностью прервать операцию???
Здравствуйте, Аноним, Вы писали:
А>Не уж-то никто не в курсе? я задолбался уже А>По каким мануалам только не делал-одна фигня.... Может дело в том, что sdk под win32, а у меня 64??
А как аналогичным образом создать экземпляр xpcom компонента и вызывать его функции из C++ приложения,основанного на движке gecko?
P.S.XPCOM зарегистрирован в моем приложении следующим образом: файлы xpt и dll xpcom'а были помещены в директорию components,после запуска моего приложения в файлах xpti.dat и compreg.dat появились описания нового компонента.