转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
XPCOM--LINUX下的组件开发技术         ★★★★

XPCOM--LINUX下的组件开发技术

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1994 更新时间:2009/4/23 10:51:32

XPCOM

LINUX下的组件开发技术

 

COM技术作为微软推行的一种组件技术,在WINDOWS平台站有重要地位,在模块重用,跨语言通信等方面都能见到其身影。但今天给我要介绍的是LINUX下的COM实现----XPCOM,这是MOZILLA浏览器项目中所使用的基本技术,我们可以用C++制作XPCOM组件,在C++客户程序或MOZILLA浏览器中通过JAVASCRIPT脚本来调用组件,从而实现软件模块的复用。

 

1、         配置XPCOM的开发环境。

首先到MOZILLA的FTP下载Gecko-sdk包,这是XPCOM的开发包,MOZILLA的源码中也包括该SDK。解压该tgz包,可以看到生成大约十多个目录:

/sdk/gecko-sdk/

/sdk/gecko-sdk/xpcom/bin

/sdk/gecko-sdk/xpcom/idl

/sdk/gecko-sdk/xpcom/include

/sdk/gecko-sdk/nspr

......

 

这里说明一下其中的一些基本部分。

/sdk/gecko-sdk/xpcom/bin下主要包含了一些文件:

 

xpidl:这是idl编译器,用以根据idl产生c++头文件或组件类型库文件.

Regxpcom:这是组件注册工作,如果我们在MOZILLA浏览器中调用组件,其实不会用该工具。

Xpt-dump:类型库查看程序,用来查看.xpt文件中的组件信息。

libxpcomglue.a:这是XPCOM的基本库文件,在生成组件时将会被连接到我们的组件库中。

 

/sdk/gecko-sdk/xpcom/idl,该目录中包含了idl数据类型定义文件。

 

/sdk/gecko-sdk/xpcom/include,其中包含了制作XPCOM时所需要的基本的C++头文件。

 

/sdk/gecko-sdk中还包含了其它一引起目录,如/sdk/sdk/gecko-sdk/string/include,其中包含了XPCOM中常字符串类的C++头

文件,如果我们的组件中需要使用这些类,只需包含进必要的头文件及库文件即可。

 

2、         撰写idl文件。

这里要先用到一个uuidgen(LINUX下类似MS GUIDGEN的一个命令行程序)用以产生组件的uuid, 我们将其输出先重定向到一个文本中,呆会儿即可使用,这里我们举一个简单的例子,来演示组件的生成过程。

Idl文件如下:

//filename: nsIMyCom.idl

//begin idl --------------------------------------

#include "nsISupports.idl"

 

[scriptable,  uuid(5217115e-11fe-4d01-966d-9b27ffda6498)]

interface nsIMyCom:nsISupports

{

      void Hello(in string in_str, [retval] out string out_str);

};

//end idl-----------------------------------------

 

好了,该组件很简单,只有一个接口,并且也只有一个方法,该方法有一个字符串输入参数in_str,并且有一个字符串返回值out_str。

 

3、编译该idl文件,并完成该组件对应的C++实现。

 

/sdk/gecko-sdk/xpcom/bin/xpidl -I/sdk/gecko-sdk/xpcom/bin/idl -m header nsIMyCom.idl

 

如果没有错误,这时在当前目录下将会生成一个nsIMyCom.h文件,该文件是idl编译器对应上面的idl文件所生成的c++头文件。

 

下面是编译器生成的nsIMyCom.h文件内容:

 

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

 

#ifndef __gen_nsIMyCom_h__

#define __gen_nsIMyCom_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:    nsIMyCom */

#define NS_IMYCOM_IID_STR "5217115e-22fe-4d01-966d-9b27ffda6498"

 

#define NS_IMYCOM_IID /

  {0x5217115e, 0x22fe, 0x4d01, /

    { 0x96, 0x6d, 0x9b, 0x27, 0xff, 0xda, 0x64, 0x98 }}

 

class NS_NO_VTABLE nsIMyCom : public nsISupports {

 public:

 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMYCOM_IID)

 

  /* void Hello (in string in_str, [retval] out string out_str); */

  NS_IMETHOD Hello(const char *in_str, char **out_str) = 0;

 

};

 

/* Use this macro when declaring classes that implement this interface. */

#define NS_DECL_NSIMYCOM /

  NS_IMETHOD Hello(const char *in_str, char **out_str);

 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */

#define NS_FORWARD_NSIMYCOM(_to) /

  NS_IMETHOD Hello(const char *in_str, char **out_str) { return _to Hello(in_str, out_str); }

 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe

way. */

#define NS_FORWARD_SAFE_NSIMYCOM(_to) /

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


[C语言系列]C# 和 Linux 时间戳转换  [Web开发]PHP flock文件锁介绍
[Web开发]flock() Linux下的文件锁  [电脑应用]Linux下的六个免费的虚拟主机管理系统介绍
[电脑应用]Linux数据库大比拚  [操作系统]在Windows中玩转Linux操作系统
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]掌握 Linux 调试技术
[办公软件]理解 Linux 配置文件  [聊天工具]Real10 & Xpdf installation on Linux Box
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台