打印本文 打印本文 关闭窗口 关闭窗口
XPCOM--LINUX下的组件开发技术
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2840  更新时间:2009/4/23 10:51:32  文章录入:mintao  责任编辑:mintao
*info)

{

    return NS_OK;

}

 

static NS_METHOD nsMyComUnregistrationProc(nsIComponentManager *aCompMgr,

nsIFile *aPath,   const char *registryLocation,   const nsModuleComponentInfo *info)

{

    return NS_OK;

}

 

NS_DECL_CLASSINFO(nsMyCom)

 

static const nsModuleComponentInfo components[] ={

  { "nsMyCom Component", NS_MYCOM_CID, NS_MYCOM_CONTRACTID,nsMyComConstructor,

    nsMyComRegistrationProc /* NULL if you dont need one */,

    nsMyComUnregistrationProc /* NULL if you dont need one */,

    NULL /* no factory destructor */,

    NS_CI_INTERFACE_GETTER_NAME(nsMyCom),

    NULL /* no language helper */,

    &NS_CLASSINFO_NAME(nsMyCom)

  }

};

NS_IMPL_NSGETMODULE(nsMyComModule, components)

 

5、制作Makefile,生成,安装组件

好了,我们可以编写Makefile文件,来编译我们刚才编写的组件了.

 

#filename:Makefile

#begine-------------------------------------

 

CPP = g++

CPPFLAGS += -fno-rtti -fno-exceptions -shared

GECKO_SDK_PATH = /sdk/gecko-sdk

XPIDL = $(GECKO_SDK_PATH)/xpcom/bin/xpidl

CPPHEADER = -m header

TYPELIB = -m typelib

REGDIR = /usr/local/lib/mozilla-1.6

OUTDIR = $(REGDIR)/components

GECKO_CONFIG_INCLUDE = -include mozilla-config.h

GECKO_DEFINES  = -DXPCOM_GLUE

GECKO_INCLUDES = -I$(GECKO_SDK_PATH) \

-I$(GECKO_SDK_PATH)/xpcom/include\

-I$(GECKO_SDK_PATH)/nspr/include

GECKO_LDFLAGS =  -L$(GECKO_SDK_PATH)/xpcom/bin -lxpcomglue \

-L$(GECKO_SDK_PATH)/nspr/bin -lnspr4

 

 

GECKO_IDL = -I$(GECKO_SDK_PATH)/xpcom/idl

 

build: idl nsMyCom.o nsMyComModule.o

      $(CPP) $(CPPFLAGS) -o libxpmycom.so $(GECKO_DEFINES) \

      $(GECKO_LDFLAGS) nsMyCom.o nsMyComModule.o

      chmod +x libxpmycom.so

 

idl: nsIMyCom.idl

     $(XPIDL) $(GECKO_IDL) $(CPPHEADER) nsIMyCom.idl

     $(XPIDL) $(GECKO_IDL) $(TYPELIB) nsIMyCom.idl

 

nsMyCom.o: nsMyCom.cpp

      $(CPP) $(GECKO_CONFIG_INCLUDE) $(GECKO_DEFINES) \

      $(GECKO_INCLUDES) -c nsMyCom.cpp -o nsMyCom.o

       

nsMyComModule.o: nsMyComModule.cpp

      $(CPP) $(GECKO_CONFIG_INCLUDE) $(GECKO_DEFINES) \

      $(GECKO_INCLUDES) -c nsMyComModule.cpp -o nsMyComModule.o

           

install:

      cp nsIMyCom.xpt $(OUTDIR)/

      cp libxpmycom.so $(OUTDIR)/

 

clean:

      rm *.o

      rm *.so

      rm *.*~

      rm *~

#end-------------

 

如果一切无误,我们make之后,g++就会在当前目录下生成libxpmycom.so库文件。然后再将该组件安装到mozilla的组件目录中:

make install

该组件库及对应的类型库nsIMyCom.xpt将会被拷到/usr/local/lib/mozilla-1.6/components(要确认你的组件目录,如mozilla1.4目录一般为usr/local/lib/mozilla-1.4/components)目录中。

 

这时我们可以从控制台启动mozilla浏览器,在浏览器输出的一系列信息中,将会有该组件被注册成功的信息。

 

6、在html/javascript中测试该组件。

该html如下:

//------------------------------------

<html>

<head>

<title>

测试XPCOM组件

</title>

</head>

 

<body>

 

<script>

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

var mycom = Components.classes["@westsoft.org/mycom;1"].createInstance();

mycom = mycom.QueryInterface(Components.interfaces.nsIMyCom);

 

上一页  [1] [2] [3] [4]  下一页

打印本文 打印本文 关闭窗口 关闭窗口