Помогите с XPCOM
От: Аноним  
Дата: 28.09.07 04:04
Оценка:
Сделал все как описано в статье http://developer.mozilla.org/en/docs/How_to_build_a_binary_XPCOM_component_using_Visual_Studio
Сделал скрипт:

  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);

Получаю сообщение: undefined. Приплыли...
Re[2]: Помогите с XPCOM
От: denaturat  
Дата: 04.10.07 06:01
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Не уж-то никто не в курсе? я задолбался уже


Нет. Просто народ в шоке — C++ просто не узнать. Минут десять думал, что это — C++ или C# следующей версии, только потом по одинарным кавычкам дошло, что это JavaScript.

А>По каким мануалам только не делал-одна фигня.... Может дело в том, что sdk под win32, а у меня 64??


Может.


Где-нибудь в этом районе посмотри:
http://forums.mozillazine.org/viewtopic.php?p=3053646&sid=b58e29958ab329535881044970051987
Re[3]: Помогите с XPCOM
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 04.10.07 06:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>var obj = Components.classes[cid].createInstance();

А>alert(Components.interfaces.ISpecialThing);
А>Получаю сообщение: undefined. Приплыли...

Для начала поставь Firefox расширение XPCOMViewer и убедись, что нужные тебе интерерфейсы торчат из компонента.
-- Андрей
Re[4]: Помогите с XPCOM
От: Аноним  
Дата: 04.10.07 07:03
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:
АК>Для начала поставь Firefox расширение XPCOMViewer и убедись, что нужные тебе интерерфейсы торчат из компонента.
Моего интерфейса нет, есть только тыШЫгззщкеы
Собрал пример.... В чем может быть дело?
Re[5]: Помогите с XPCOM
От: Аноним  
Дата: 04.10.07 07:14
Оценка:
Все решилось гораздо проще!
Я сам, тупица, вместо *.xpt клал в компоненты *.exp
Остается один актульный вопрос: Делаю кнопку, накоторую вешаю ява скрипт. Ява скрипт из моего интерфейса дергает функцию из моего интерфейса, как мне реализовать прогресс бар с возможностью прервать операцию???
Re[2]: Помогите с XPCOM
От: Lermont0v  
Дата: 24.04.08 16:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не уж-то никто не в курсе? я задолбался уже

А>По каким мануалам только не делал-одна фигня.... Может дело в том, что sdk под win32, а у меня 64??
А как аналогичным образом создать экземпляр xpcom компонента и вызывать его функции из C++ приложения,основанного на движке gecko?
P.S.XPCOM зарегистрирован в моем приложении следующим образом: файлы xpt и dll xpcom'а были помещены в директорию components,после запуска моего приложения в файлах xpti.dat и compreg.dat появились описания нового компонента.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.