Страницы: 1
Господа, я уже задлбался регистрить компанент который не регистрится как его не крути ....
Причем непонятно почему точно такой же компанент с исходниками взятый как пример компилю 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 .......
ГОСПОДА ГДЕ МОЖЕТ БЫТЬ РАЗГАДКА - в КАКУЮ СТОРОНУ КОПАТЬ (КАК ЗАРЕГИСТРИТЬ КОМПОНЕНТ)?
Отсутствует
Все это скомпилил и получил MyComponent.so - библиотеку, которую положил в директорию components вместе с MyComponent.xpt
'MyComponent.xpt' - он точно от вашего компонента, а не от эталонного ? GUID в *.idl и в процедуре регистрации компонента совпадают ? Описание интерфейса имеет атрибут 'scriptable' ?
Если что-то из перечисленного - надо бы поправить. Если нет, по-видимому - особенности компиляции.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Со всеми 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)
Отсутствует
Страницы: 1