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

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2022 更新时间:2009/4/23 10:51:32
  NS_IMETHOD Hello(const char *in_str, char **out_str) { return !_to ? NS_ERROR_NULL_POINTER : _to->Hello

(in_str, out_str); }

 

#if 0

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

 

/* Header file */

class nsMyCom : public nsIMyCom

{

public:

  NS_DECL_ISUPPORTS

  NS_DECL_NSIMYCOM

 

  nsMyCom();

  virtual ~nsMyCom();

  /* additional members */

};

 

/* Implementation file */

NS_IMPL_ISUPPORTS1(nsMyCom, nsIMyCom)

 

nsMyCom::nsMyCom()

{

  /* member initializers and constructor code */

}

 

nsMyCom::~nsMyCom()

{

  /* destructor code */

}

 

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

NS_IMETHODIMP nsMyCom::Hello(const char *in_str, char **out_str)

{

    return NS_ERROR_NOT_IMPLEMENTED;

}

 

/* End of implementation class template. */

#endif

 

 

#endif /* __gen_nsIMyCom_h__ */

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

 

从上面可以看到, xpidl生成了对应该接口的头文件,同时还包括对该头文件实现的C++类模板.下一步的工作一样很轻松,

我们将#if 0 至#endif 之间的代码分别复制到新建的nsMyCom.h 和nsMyCom.cpp文件中,

注意其中有新增的代码,下面是生成的两个文件.

//filename: nsMyCom.h

#include "nsImyCom.h"

 

#define NS_MYCOM_CID /

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

  //类似WINDOWS 中CLSID

 

 

#define NS_MYCOM_CONTRACTID "@westsoft.org/mycom;1"   //类似WINDOWS中的progid;

 

class nsMyCom : public nsIMyCom

{

public:

  NS_DECL_ISUPPORTS

  NS_DECL_NSIMYCOM

 

  nsMyCom();

  virtual ~nsMyCom();

  /* additional members */

};

 

 

 

//filename: nsMyCom.cpp

#include "nsMyCom.h"

#include "nsMemory.h"

#include <cstdio>

#include <cstdlib>

#include <string>

NS_IMPL_ISUPPORTS1_CI(nsMyCom, nsIMyCom)      //此处的宏已修改.

nsMyCom::nsMyCom()

{

}

 

nsMyCom::~nsMyCom()

{

}

 

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

NS_IMETHODIMP nsMyCom::Hello(const char *in_str, char **out_str)

{

      printf("\n-----------------\n");

      printf("%s\n", in_str);

      std::string str_tmp = "your input is: ";

      str_tmp += in_str;

      *out_str = (char*)malloc(str_tmp.length() + 1);

      *out_str = (char*)str_tmp.c_str();

 

      return NS_OK;

}

 

4、完成组件的工厂方法及注册模块。

组件本身的实现就上面两个类即可以了. 但是我们仅把上面的类生成动态库是不能作为组件工作的,我们还需要做一件事情.实现组件的注册及创建相关的功能.这几乎是一个固定的模式.

 

下面是该部分的代码,跟MS中的实现类似,用了许多的宏:

#include "nsIGenericFactory.h"

#include "nsMyCom.h"

 

NS_GENERIC_FACTORY_CONSTRUCTOR(nsMyCom)

 

static NS_METHOD nsMyComRegistrationProc(nsIComponentManager *aCompMgr,

nsIFile *aPath, const char *registryLocation, const char *componentType, const nsModuleComponentInfo

上一页  [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……
    咸宁网络警察报警平台