Страницы: 1
Здравствуйте уважаемые !
Хотел бы прояснить вопрос у знающих людей.
А именно - что создает файлы xpti.dat и compreg.dat ?
Меня не ясно почему в xpti.dat пишется создание интерфейса IMycomponent
а в compreg.dat не пишится ни компонент ни интерфейс ??????
Отсутствует
что создает файлы xpti.dat и compreg.dat ?
Эти файлы генерируются при регистрации XPCOM, которая выполняется при запуске приложения в случае, если эти файлы были удалены или при установке/удалении/отключении/включении аддона (по крайней мере если он содержит XPCOM-компоненты).
xpti.dat содержит список всех известных интерфейсов. compreg.dat содержит список всех зарегистрированных XPCOM-компонентов (список файлов, список CLASSIDов и соответствие между CONTRACTIDами и CLASSIDами), а также категории.
compreg.dat должен содержать информацию о самом компоненте, по крайней мере путь к файлу и CLASSID (не путать с аналогичным GUIDом интерфейса). Проще всего сделать поиск в этом файле по CLASSIDу, но лучше всего проветять то, что компонент зарегистрировался, по наличию/отсутствию соответствующего элемента в Components.classes в JavaScript. Можно попробовать удалить эти два файла, чтобы заново зарегистриовать все компоненты. Если не работает, см. Troubleshooting XPCOM components registration.
Отсутствует
Вот file.js который вызывает компонент на выполнение в нем я с помощью alert(obj); проверяю наличие объекта как вы и указывали в предыдущем посту.
Но дело в том, что этот скрипт ничего не выводит ни сообщения связанные с obj ни сообщения об ошибке ничего .....
в xpti.dat - интерфейс прописан а вот в compreg.dat ничего нет .....
// вызов теста компанента function MyComponentTest() { var obj = null; try // { //alert(Components.interfaces.IMyComponent); // По Contract ID получаем доступ к модулю const cid = "@mydomain.com/XPCOMSample/MyComponent;1"; obj = Components.classes[cid].createInstance(Components.interfaces.IMyComponent); alert(obj); // Получаем указатель на объект нашего интерфейса obj = obj.QueryInterface(Components.interfaces.IMyComponent); /* } catch(err) { alert("MyComponent ERROR") ; alert(cid) ; alert(err); return; } */ // Вызываем наш метод для сложения чисел var res = obj.Add(3, 4); document.getElementById("result").value = "3 + 4 = " + res; }
Отредактировано Shutnik (11-03-2009 16:08:00)
Отсутствует
По каким причинам может не создаваться (прописываться) в compreg.dat CLASSID ?
Можно ли как то принудительно туда прописать ?
Отсутствует
По каким причинам может не создаваться (прописываться) в compreg.dat CLASSID ?
Troubleshooting XPCOM components registration. Если компонент не регистрируется, при правильных настройках в консоли (в процессе регистрации, естесственно, например после удаления xpti.dat и compreg.dat) должно появиться сообщение "Failed to load XPCOM component ..."
Но дело в том, что этот скрипт ничего не выводит ни сообщения связанные с obj ни сообщения об ошибке ничего
Может функция вообще не вызывается? Можно попробовать добавить просто alert("x") для проверки. Еще лучше все-таки раскомментировать try, потому что в случае ошибки иначе ничего и не увидишь.
Кстати, можно проверять проще, через JS-консоль.
Можно ли как то принудительно туда прописать ?
Не стоит: все равно компонент не работает, к тому же при следующей регистрации файл заново перепишется
Отсутствует
Спасибо большое за ответ на мой вопрос !
Я конечно же раскоментировал try блок но это не сильно помогло в решении задачи .
Выводится нечто вот такое
alert(Components.interfaces.IMyComponent); --- выводит " IMyComponent"
alert(cid) ; ---- "@mydomain.com/XPCOMSample/MyComponent;1"
alert(err); ------- "TypeError: Components.classes[cid] is undefined"
КАК ЖЕ ЕГО ЗАРЕГИСТРИРОВАТЬ ?????
Отсутствует
Страницы: 1