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

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№124-03-2009 16:15:14

alex171069
Участник
 
Группа: Members
Зарегистрирован: 16-01-2009
Сообщений: 26
UA: Firefox 3.0

Регистрация

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

   Причем непонятно почему точно такой же компанент с исходниками взятый как пример компилю 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, 0x4377, \
    { 0x92, 0x3b, 0xc9, 0x87, 0x41, 0x8d, 0x84, 0x29 } }

static const nsModuleComponentInfo components[] =
{
  { "SimpleTest in C++",
    SIMPLETEST_CID,
    "@test.mozilla.org/simple-test;1?impl=c++",
    SimpleTestConstructor
  }
};

NS_IMPL_NSGETMODULE(SimpleTestModule, components)

  И по nsISimpleTest.idl сгенерил .h файл


 
#ifndef __gen_nsISimpleTest_h__
#define __gen_nsISimpleTest_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif

/* starting interface:    nsISimpleTest */
#define NS_ISIMPLETEST_IID_STR "f2f71d91-0451-47ec-aaa0-166663a7711a"

#define NS_ISIMPLETEST_IID \
  {0xf2f71d91, 0x0451, 0x47ec, \
    { 0xaa, 0xa0, 0x16, 0x66, 0x63, 0xa7, 0x71, 0x1a }}

class NS_NO_VTABLE NS_SCRIPTABLE nsISimpleTest : public nsISupports {
public:

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISIMPLETEST_IID)

  /**
   * This interface adds two numbers together and returns the result.
   */
  /* long add (in long a, in long b); */
  NS_SCRIPTABLE NS_IMETHOD Add(PRInt32 a, PRInt32 b, PRInt32 *_retval) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsISimpleTest, NS_ISIMPLETEST_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSISIMPLETEST \
  NS_SCRIPTABLE NS_IMETHOD Add(PRInt32 a, PRInt32 b, PRInt32 *_retval);

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSISIMPLETEST(_to) \
  NS_SCRIPTABLE NS_IMETHOD Add(PRInt32 a, PRInt32 b, PRInt32 *_retval) { return _to Add(a, b, _retval); }

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSISIMPLETEST(_to) \
  NS_SCRIPTABLE NS_IMETHOD Add(PRInt32 a, PRInt32 b, PRInt32 *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->Add(a, b, _retval); }

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsSimpleTest : public nsISimpleTest
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSISIMPLETEST

  nsSimpleTest();

private:
  ~nsSimpleTest();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsSimpleTest, nsISimpleTest)

nsSimpleTest::nsSimpleTest()
{
  /* member initializers and constructor code */
}

nsSimpleTest::~nsSimpleTest()
{
  /* destructor code */
}

/* long add (in long a, in long b); */
NS_IMETHODIMP nsSimpleTest::Add(PRInt32 a, PRInt32 b, PRInt32 *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_nsISimpleTest_h__ */


                        И ВСЕ ЭТО НОРМАЛЬНО СКОМПИЛИЛОСЬ И ЗАРЕГИСТРИЛОСЬ КАК КОМПОНЕНТ,    В ПОСЛЕДСТВИИ Я СОЗДАЛ СВОЙ КОМПОНЕНТ НО РАЗДЕЛИЛ КАК И ГЛАСИД ДОКА К SDK НА НЕСКОЛЬКО ФАЙЛОВ IMyComponent.idl MyComponent.cpp MyComponent..h IMyComponent.xpt MyComponentModule.cpp
    ПОДЧЕРКИВАЮ ФУНКЦИОНАЛ ИДЕНТИЧЕН ДО БУКВЕННО .....
   Все это скомпилил и получил MyComponent.so  - библиотеку, которую положил в директорию components вместе с MyComponent.xpt
   Запускаю xulrunner ./application.ini   и получаю сообщение IMycomponent - зарегистрен а вот сам компонент Undefined .......

       ГОСПОДА ГДЕ МОЖЕТ БЫТЬ РАЗГАДКА  - в КАКУЮ СТОРОНУ КОПАТЬ (КАК ЗАРЕГИСТРИТЬ КОМПОНЕНТ)?

Отсутствует

 

№224-03-2009 17:11:56

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.0
Веб-сайт

Re: Регистрация

Все это скомпилил и получил MyComponent.so  - библиотеку, которую положил в директорию components вместе с MyComponent.xpt

'MyComponent.xpt' - он точно от вашего компонента, а не от эталонного ? GUID в *.idl и в процедуре регистрации компонента совпадают ? Описание интерфейса имеет атрибут 'scriptable' ?
Если что-то из перечисленного - надо бы поправить. Если нет, по-видимому - особенности компиляции.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№325-03-2009 10:57:09

alex171069
Участник
 
Группа: Members
Зарегистрирован: 16-01-2009
Сообщений: 26
UA: Firefox 3.0

Re: Регистрация

Со всеми 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
    $(CXX) -o $(FILES_O) -c -I $(SW_INC) -include $(CG_INC)gcc_hidden.h $(XZ_ADD) -I. -I $(APPEND_REW) -I $(PROJECT_FOLDER) -I $(APPEND_REW)/nspr -I         $(GECKO_SDK_PATH) -I $(GECKO_SDK_PATH)/include \
-fPIC -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wcast-align -Wno-long-long -pedantic -fno-strict-aliasing -fshort-wchar -pthread -pipe  -DNDEBUG -DTRIMMED -Os -freorder-blocks -fno-reorder-functions -finline-limit=50 \
-DMOZILLA_CLIENT -include $(BASE_REW)/mozilla-config.h MyComponent.cpp

# MyComponentModule.cpp MyComponent.cpp MyComponent.o

    $(CXX) -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Wcast-align -Wno-long-long -pedantic -fno-strict-aliasing -fshort-wchar -pthread -pipe  -DNDEBUG -DTRIMMED -Os -freorder-blocks -fno-reorder-functions -finline-limit=50 -fPIC -shared -Wl,-z,defs -Wl,-h,MyComponent.so -o MyComponent.so MyComponent.o -lpthread \
    -Wl,-rpath-link,$(XZ_ADD2)/bin $(XZ_ADD2)/lib/libxpcomglue_s.a -L$(XZ_ADD2)/bin -lxpcom -L$(XZ_ADD2)/lib -lplds4 -lplc4 -lnspr4 -lpthread -ldl  -Wl,--version-script \
    -Wl,$(XZ_ADD3)/components-version-script -Wl,-Bsymbolic -ldl -lm


    chmod +x $(TARGET)
    strip $(TARGET)
 
#clean:
#    rm -f IMyComponent.xpt
#    rm -f IMyComponent.h
#    rm -f $(TARGET)

Отсутствует

 

Board footer

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