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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

Разработка » return » 09-04-2009 16:19:33

Я так понял, что в return можно только макросы кидать типа NS_OK или error и.т.п.
  а настоящий return это   *_retval = char* например ?

Разработка » return » 09-04-2009 15:43:25

Господа как вывести из функции тип char* - т.е. строку  ?
Функция декларирована так
     /* string GetData (); */
  NS_SCRIPTABLE NS_IMETHOD GetData(char **_retval) = 0;  - это в .h файле интерфейса
А вот так в .Idl файле
                 string GetData();     

Т.е. вродебы возвращать она должна строку но в реализации так не выходит
   получается только вернуть NS_OK .
В реализации этой функции я обращаюсь к глобальной переменной типа static char* variables    ;
                                                                          которую проверяю  и если все ОК то должен выдать на return .....
                                                                        но вот выдать на return не удается .
              Почему? непонятно .......

Разработка » Прилинковать » 30-03-2009 16:44:25

Господа как лучше всего прилинковать модуль скажем outModul.h outModul.cpp к уже готовой компаненте состоящей из файлов   
    companentaModule.cpp
    Icompanenta.idl
    Icompanenta.h
    companenta.h
    companenta.cpp
                                В какой из этих .h файлов нужно вставить #include outModul.h что бы корректно расширить функционал ?

Разработка » Регистрация » 25-03-2009 10:57:09

Со всеми UUid b scriptable все как раз в норме проверял сам не раз, однако смущает одна вещь - размер получившийся .so у меня 5.5Kb а у эталонного примеры 26kb .
  Как видно это несколько не одинаковые файлы ..... если не сказать больше .
В связи с этим напрашивается вопрос а с теми ли ключами я компилил и собирал т.е. MakeFile у меня правильный или нет ?

  Приведу MakeFile для внятности.

CXX = c++
PROJECT_FOLDER = /home/al/NetBeansProjects/_XPCOM/tst2/cpp2
SW_INC=/data/sites/xul_src/_mozilla/config/system_wrappers
CG_INC=/data/sites/xul_src/_mozilla/config/
XZ_ADD=-DOSTYPE=\"Linux2.6.18-92.1.18\" -DOSARCH=Linux
GECKO_SDK_PATH=/data/sites/xul_src/_mozilla/dist/sdk

APPEND_REW=/data/sites/xul_src/_mozilla/dist/include
BASE_REW=/data/sites/xul_src/_mozilla

XZ_ADD2=/data/sites/xul_src/_mozilla/dist
XZ_ADD3=/data/sites/xul_src/_mozilla/build/unix/gnu-ld-scripts

FILES_O = MyComponent.o
FILES = MyComponent.cpp MyComponentModule.cpp
TARGET = MyComponent.so

build:

# // worker modul
   

Разработка » Регистрация » 24-03-2009 16:15:14

Господа, я уже задлбался регистрить компанент который не регистрится как его не крути ....

   Причем непонятно почему точно такой же компанент с исходниками взятый как пример компилю MakFile и выполняю и все регистрится ....!
   А мой компанент имеющий все точно такое же - с темже функционалом никак не регистрится хоть тресни .
    Дело происходит на Linux-е С++ я взял пример состоящий из файла SimpleTest.cpp и nsISimpleTest.h как примеры 
    которые имеют структуру

  SimpleTest.cpp
     
#include <stdio.h>
#include "nsISimpleTest.h"
#include "nsIGenericFactory.h"

class SimpleTest : public nsISimpleTest
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSISIMPLETEST
};

NS_IMPL_ISUPPORTS1(SimpleTest, nsISimpleTest)

NS_IMETHODIMP
SimpleTest::Add(PRInt32 a, PRInt32 b, PRInt32 *r)
{
  printf("add(%d,%d) from C++\n", a, b);

  *r = a + b;
  return NS_OK;
}

NS_GENERIC_FACTORY_CONSTRUCTOR(SimpleTest)

// 5e14b432-37b6-4377-923b-c987418d8429
#define SIMPLETEST_CID \
  { 0x5e14b432, 0x37b6, 0x4

Разработка » Регистрация -детали » 12-03-2009 09:33:51

Спасибо большое за ответ на мой вопрос !
Я конечно же раскоментировал try блок но это не сильно помогло в решении задачи .
Выводится нечто вот такое

     alert(Components.interfaces.IMyComponent); --- выводит    " IMyComponent"
     alert(cid)  ;     ----  "@mydomain.com/XPCOMSample/MyComponent;1"
      alert(err);   ------- "TypeError: Components.classes[cid] is undefined"
     
     КАК ЖЕ ЕГО ЗАРЕГИСТРИРОВАТЬ ?????

Разработка » Регистрация -детали » 11-03-2009 14:13:50

По каким причинам может не создаваться (прописываться) в compreg.dat CLASSID  ?
Можно ли как то принудительно туда прописать ?

Разработка » Регистрация -детали » 11-03-2009 10:51:13

Вот file.js который вызывает компонент на выполнение в нем я с помощью alert(obj); проверяю наличие объекта как вы и указывали в предыдущем посту.
  Но дело в том, что этот скрипт ничего не выводит ни сообщения связанные с obj ни сообщения об ошибке ничего .....
  в xpti.dat - интерфейс прописан а вот в compreg.dat ничего нет .....


[code]// вызов теста компанента
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;
    }
*/
    // Вызываем наш метод д

Разработка » Регистрация -детали » 10-03-2009 15:36:24

Здравствуйте уважаемые !

     Хотел бы прояснить вопрос у знающих людей.
А именно - что создает файлы xpti.dat и compreg.dat ?
Меня не ясно почему в xpti.dat пишется создание интерфейса IMycomponent
а в compreg.dat не пишится ни компонент ни интерфейс ??????

Разработка » NewGeneric » 04-03-2009 17:35:15

С Какой библиотекой хоть бы узнать он связан ?
Может кто сталкивался уже ?

Разработка » NewGeneric » 03-03-2009 16:51:15

Господа, ктонибудь занет почему Xulrunner при запуске ругается на подобный модуль - непонятно откуда ноги ростут .....? 

undefined symbol: _Z20NS_NewGenericModule2PK12nsModuleInfoPP9nsIModule

Разработка » регистрация XPCOM » 02-03-2009 11:24:48

В этой строке obj получает 0 ....!
obj = Components.classes[cid].createInstance()
   
   Тогда вопрос- Components.classes с чем связан и где искать ошибку которая связана с этим интерфейсом ?

Разработка » регистрация XPCOM » 27-02-2009 19:56:18

Я предпологаю что компанент не зарегистрирован просто .
Господа как зарегистрировать компанент состаящий из file.xpt  и file.so ?

Разработка » регистрация XPCOM » 27-02-2009 16:37:50

Здравствуйте господа !
  Хотел бы поинтересоваться у знающих людей как правильно зарегистрировать компонент XPCOM в LINUX-е ?
  Написнный на С++ скомпиленный и вроде как работающий но вот при вызове из JavaScript выдает ошибку о ненахождении класса компонента .
   ВЫЗЫВАЕТСЯ ТАК
   try
    {
        // По Contract ID получаем доступ к модулю
        const cid = "@mydomain.com/XPCOMSample/MyComponent;1";
        obj = Components.classes[cid].createInstance();
         
       
        // Получаем указатель на объект нашего интерфейса
        obj = obj.QueryInterface(Components.interfaces.IMyComponent);
    }
    catch(err)
    {
         
      alert(err);
        return;
    }
                    РУГАЕТСЯ ТАК :   
                                    Error: Permission denied to get property XPCComponents.classes   ????!
                 
              То есть запускается catch(err)

Разработка » Линковка » 11-02-2009 16:54:58

Господа, собираю проект XPCOM компанента все вроде правильно но линковщик ругается на библиотеки которые предствлены в SDK
И выглядет это следующим образом ....
   
  Сообщение G++
              /usr/bin/ld: skipping incompatible /home/al/NetBeansProjects/XPCOM/gecko/lib/libxpcomglue_s.a when searching for -lxpcomglue_s
/usr/bin/ld: cannot find -lxpcomglue_s
collect2: выполнение ld завершилось с кодом возврата 1

     А вот на что он ругается :
              GECKO_LDFLAGS =  -L $(GECKO_SDK_PATH)/lib -lxpcomglue_s -lxul -lxpcom -lplds4 -lplc4 -lnspr4 -lpthrea
          Т.Е. он видит вместо библиотек представленых в SDK таких как libxpcomglue_s .... ключи которые для сборки прописаны в Makefile т.е.
               -lxpcomglue_s -lxul -lxpcom -lplds4 -lplc4 -lnspr4 -lpthrea

           Вопрос что надо прописать в строке линковщика для того чтобы все собралось ?
           Все пути наместе и тут нареканий нет .

Разработка » XPcom - невероятный ! » 10-02-2009 10:43:29

У меня тут господа вопрос  из разряда "ЧТО ЭТО БЫЛО" .
 
Компилятор говорит, что процесс завершился с кодом 1
и говорит что не нашел -lxpcomglue_s в библиотеке  libxpcomglue_s.a .
А что такое -lxpcomglue_s ? И счем его есть ? Где Искать ?

libxpcomglue_s.a when searching for -lxpcomglue_s
/usr/bin/ld: cannot find -lxpcomglue_s

Разработка » MyComponentModule » 10-02-2009 10:38:56

Господа нашел где затаилась ошибка ->   {0xa55bd0a3, 0x1f72, 0x4803 {0xbb,
                                                                                                              ^^^^
                                                                                                             небыло запятой оказывается !
                                                                              И не подумаешь, что может запятая не поставленная вовремя!

Разработка » MyComponentModule » 10-02-2009 10:04:49

Если бы так просто уже нашел бы .....
На этом месте числится MY_COMPONENT_CID
Может сам идентификатор не нравится ?
Мне слегка не понятен сам принцип его записи :
    #define MY_COMPONENT_CID {0xa55bd0a3, 0x1f72, 0x4803 {0xbb, 0x50, 0xf6, 0x52, 0xc4, 0x7a, 0xfb, 0x66}}
    Почему то нужно его разделять на разные сигменты и заключать в несколько скобок {.......{..........}}   ?????

Разработка » MyComponentModule » 09-02-2009 11:02:58

Вот такие ошибки выдаются по неизвестной мне  причине может кто сталкивался с подобным
?
MyComponentModule.cpp:10: ошибка: expected `}' before ‘{’ token
MyComponentModule.cpp:10: ошибка: expected `}' before ‘{’ token
MyComponentModule.cpp:10: предупреждение: missing braces around initializer for ‘nsModuleComponentInfo’
MyComponentModule.cpp:10: ошибка: expected ‘,’ or ‘;’ before ‘{’ token
MyComponentModule.cpp:10: ошибка: expected declaration before ‘}’ token

Содержимое файла  MyComponentModule.cpp:
   
#include "nsIGenericFactory.h"

#include "MyComponent.h"



NS_GENERIC_FACTORY_CONSTRUCTOR(MyComponent)



static nsModuleComponentInfo components[] =

{

    {

       MY_COMPONENT_CLASSNAME,

       MY_COMPONENT_CID,

       MY_COMPONENT_CONTRACTID,

       MyComponentConstructor,

    }

};



NS_IMPL_NSGETMODULE("MyComponentsModule", components)

Разработка » XPcom » 05-02-2009 16:06:51

Это ясно что ноги оттуда ростут но не ясно почему .
Вроде все норма в этом файле незнаю с какой стороны и подъехать к проблеме.

Разработка » XPcom » 05-02-2009 11:04:41

Господа, я начал понимать, что чегото не понимаю я взял пример простейшего XPCOM компонента по адресу
http://www.linux.org.ru/wiki/en/XUL_XPCOM  и попытался его скомпилить как в статье по этому адресу описано .
Компилил G++ в строгом соответствии с путями и наличием необходимых SDK .
Процесс протекал на LINUX RED HUT
  И как же ябыл удивлен увидем такое колличество ошибок !?
     
       g++ -Wall -Os -o MyComponent.so -include mozilla-config.h -DXPCOM_GLUE -DXPCOM_GLUE_USE_NSPR -I /home/al/NetBeansProjects/XPCOM/gecko/include  -I/home/al/NetBeansProjects/XPCOM -fno-rtti -fno-exceptions -shared -L /home/al/NetBeansProjects/XPCOM/gecko/lib -lxpcomglue_s -lxul -lxpcom -lplds4 -lplc4 -lnspr4 -lpthrea         MyComponent.cpp MyComponentModule.cpp
In file included from MyComponent.h:3,
                 from MyComponent.cpp:1:
IMyComponent.h:9:19: warning: extra tokens at end of #ifndef directive
IMyComponent.h:36:63: error: macro "NS_DEFINE_STATIC_IID_ACCESSOR" passed 2 arguments, but t

Разработка » XPcom » 26-01-2009 15:54:52

Здравствуйте !
Я тут как вы и советовали занялся самым не благодарным делом - а именно компиляцией этого чуда.
   В примере компанента описан Makfile   http://www.linux.org.ru/wiki/en/XUL_XPCOM#Makefile
   В котором конечно же использованы пути которые никак к моей системе не относятся , это понятно но не ясно другое :
 
   после применения исправленого Makefile мне вываливается вот такая ошибка -
   
    g++ -Wall -O2 -o MyComponent.so -include mozilla-config.h -DXPCOM_GLUE -DXPCOM_GLUE_USE_NSPR -I/data/sites/xul_src/mozilla/xpcom                                /base -I/data/sites/xul_src/mozilla/xpcom                                /components -fno-rtti -fno-exceptions -shared (FILES) -L/data/sites/xulrunner -lxpcomglue_s -lxul -lxpcom -lplds4 -lplc4 -lnspr4 -lpthrea FILES = MyComponent.cpp MyComponentModule.cppTARGET := MyComponent.so
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `g++ -Wall -O2 -o MyComponent.so -include mozilla-config.h -DXPCOM

Разработка » как с меньшими затратами прикрутить С++ прогу к XPCOM » 17-01-2009 10:32:17

А если сервака нет и развернуть его нет возможности .
То как обращаться к приложению ?
Притом это приложение не консольное - это .so  т.е. библиотека .
Я почему про XPCOM и заговорил ,  только с помощью него можно подцепиться по типу COM объекта как в WINDOWS-e
Вот я и спрашиваю может уже есть подобный XPCOM компонент скомпилированный к нему в интерфейс тока прописать мой функционал который будет вызываться JavaScript-ом ?
Но тогда как сделать UIN для этого интерфейса и как его зарегистрировать в системе?

Разработка » как с меньшими затратами прикрутить С++ прогу к XPCOM » 16-01-2009 20:26:55

Я сильно извиняюсь за то что ввел вас в заблуждение конечно же пользователь будет использовать прогу локально на своем Firefox-е но суть от этого не меняется JavaScript передает проге некий поток char -ов скажем и  поток обработав, прога отдает результат в FireFox обратно.
  Задача состоит в том что прога стоит в сети(локальной) и начальник или другой ЮЗВЕРЬ может нажав на ссылке с помощью JavaScripta запустить прогу передав ей как входные данные поток .

Разработка » как с меньшими затратами прикрутить С++ прогу к XPCOM » 16-01-2009 19:49:42

Господа речь идет как раз про LINUX и как я понял из доки по XPCOM самое неприятное и сложное при создании XPCOM компонента это уникальный UID который потом используется в .idl для регистрации компонента в системе.
прога лежит конечно же в инете а JavaScript удаленно в сети .
Я просто никак представить не могу как максимально просто и быстро реализовать XPCOM и включить в него свою прогу.

Board footer

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