windows下开xpcom组件实现方法

一、基本概念

   XPCOM是一个跨平台组件模型,它的全称为Cross Platform Component Object Module。XPCOM实现了一个框架(framework),这个框架中,它允许开发者打破单一整体的软件项目,而分解为多个更小的模块化碎片(pieces),这些碎片也即组件(components)。XPCOM组件开发类似于Microsoft COM组件,有COM基础者,很容易学习XPCOM。

二、搭建开发环境

  XPCOM开发需要Gecko SDK ,由于Gecko SDK包含在XULRunner中,因此只要下载XULRunner SDK就可以进行开发,下面仍然以XULRunner 2.0为开发环境。

三、创建第一个XPCOM组件

  1、新建ISampleComponents.idl文件,输入以下代码:

 代码如下 复制代码

#include "nsISupports.idl"
 
 [scriptable, uuid(7F35DE58-C0E3-4480-9CA0-EB2A83F1B9CE)]
 interface ISampleComponents : nsISupports
 {
       long Sum(in long aFirst, in long aSecond);
 };

 

 代码如下 复制代码
D:xulrunner2.0bin>xpidl -m header -I "..idl" ISampleComponents.idl
D:xulrunner2.0bin>xpidl -m typelib -I "..idl" ISampleComponents.idl

 

 代码如下 复制代码
/*SampleComponents.h*/
 #pragma once
 #ifndef _SAMPLE_COMPONENTS_H_
 #define _SAMPLE_COMPONENTS_H_
 
 #include "ISampleComponents.h"
 
 #define SAMPLE_COMPONENTS_CONTRACTID "@lintclr.com/ISampleComponents;1"
 #define SAMPLE_COMPONENTS_CID  { 0x7f35de58, 0xc0e3, 0x4480, { 0x9c, 0xa0, 0xeb, 0x2a, 0x83, 0xf1, 0xb9, 0xce } };
 
 class SampleComponents : public ISampleComponents
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_ISAMPLECOMPONENTS
 
   SampleComponents();
 
 private:
   ~SampleComponents();
 };
 
 #endif

其中,uuid是由是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示接口的唯一性,可以有Microsoft GUID工具产生,nsISupports此接口是最基本的一个接口,我们继承这个接口,添加一个Sum方法两个long类型参数,返回类型也为long。
  2、编译ISampleComponents.idl文件
    将此文件复制到XULRunner2.0bin目录中,在命令行中进入此目录,键入命令如下:
如果两行命令均无错误则会创建ISampleComponents.h和ISampleComponents.xpt两个文件。
  3、使用VS2010开发组件
    (1)新建一个一个win32 DLL空项目,并将第二步中的三个文件放到项目目录中,并将ISampleComponents.h添加到项目中。
    (2)然后新建SampleComponents.h和SampleComponents.cpp两个文件,内容如下:

SampleComponents.cpp
(4)新建SampleComponentsModule.cpp文件,并键入如下代码:    
(5)配置编译选项,编译组件
        配置属性->VC++目录->附加包含目录:D:xulrunner2.0include;
        配置属性->VC++目录->库目录:D:xulrunner2.0lib;
        配置属性->C/C++->预处理器->预处理定义:XPCOM_GLUE
                                                                  XP_WIN
                                                                  XP_WIN32
                                                                  XPCOM_GLUE_USE_NSPR
       配置属性->链接器->输入->附加依赖项:nspr4.lib
                                                          xpcom.lib
                                                          xpcomglue_s_nomozalloc.lib
       点击生成,生成组件成功。

 代码如下 复制代码
/*SampleComponents.cpp*/
 #include "SampleComponents.h"
 
 NS_IMPL_ISUPPORTS1(SampleComponents, ISampleComponents)
 
 SampleComponents::SampleComponents()
 {
 
 }
 
 SampleComponents::~SampleComponents()
 {
 
 }
 
 NS_IMETHODIMP SampleComponents::Sum(PRInt32 aFirst, PRInt32 aSecond, PRInt32 *_retval NS_OUTPARAM)
 {
     *_retval = aFirst + aSecond;
     return NS_OK;
 }

 

 代码如下 复制代码
#include "mozilla/ModuleUtils.h"
 #include"nsIClassInfoImpl.h"
 #include"SampleComponents.h"
 
 NS_GENERIC_FACTORY_CONSTRUCTOR(SampleComponents)
 
 NS_DEFINE_NAMED_CID(SAMPLE_COMPONENTS_CID);
 
 static const mozilla::Module::CIDEntry kSampleComCIDs[] = {
     { &kSAMPLE_COMPONENTS_CID, false, NULL, SampleComponentsConstructor },
     { NULL }
 };
 
 static const mozilla::Module::ContractIDEntry kSampleContracts[] = {
     { SAMPLE_COMPONENTS_CONTRACTID, &kSAMPLE_COMPONENTS_CID },
     { NULL }
 };
 
 static const mozilla::Module::CategoryEntry kSampleCategories[] = {
     {"my-category", "my-key", SAMPLE_COMPONENTS_CONTRACTID },
     { NULL }
 };
 
 static const mozilla::Module kSampleModule = {
     mozilla::Module::kVersion,
     kSampleComCIDs,
     kSampleContracts,
     kSampleCategories
 };
 
 NSMODULE_DEFN(nsSampleModule) = &kSampleModule;
 NS_IMPL_MOZILLA192_NSGETMODULE(&kSampleModule)

 

时间: 2024-08-04 14:29:06

windows下开xpcom组件实现方法的相关文章

C# 重写ComboBox实现下拉任意组件的方法_C#教程

一.需求 C#种的下拉框ComboBox不支持下拉复选框列表与下拉树形列表等,系统中需要用到的地方使用了第三方组件,现在需要将第三方组件替换掉. 二.设计 基本思路:重写ComboBox,将原生的下拉部分屏蔽,使用toolStripDropDown制作下拉弹出 三.问题解决 1. 问题:toolStripDropDown中放toolStripControlHost时会有边框产生,同时CheckedListBox的duck为full时底端会有很大空白 解决: toolStripControlHos

python MySQLdb Windows下安装教程及问题解决方法

  这篇文章主要介绍了python MySQLdb Windows下安装教程及问题解决方法,本文讲解了安装数据库mysql.安装MySQLdb等步骤,需要的朋友可以参考下 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://www.jb51.net/article/65743.htm ----------------------------------------------------------

嵌入式-Vxworks支持Windows下的com组件吗?

问题描述 Vxworks支持Windows下的com组件吗? Windows下用ATL编写的COM组件,在Vxworks上可以使用吗? 解决方案 不能支持,com组件只能用在windows上

windows编程-在windows下开wifi热点 wifi欢迎页是如何实现的?

问题描述 在windows下开wifi热点 wifi欢迎页是如何实现的? 在windows下开wifi热点 wifi欢迎页是如何实现的? 解决方案 同求,我想到了使用命令启动wifi然后抓包

全面解析Windows下安装 mysql5.7的方法_Mysql

关于在windows下安装mysql 5.7 •要注意的新坑: 5.7版本安装后ROOT账号是有默认的密码的,这个密码在windows下可以在mysql.ini配置文件指定的data文件夹下面,那个为.err后缀名的文件里面找到. 2016-07-16T04:14:27.448186Z 1 [Note] A temporary password is generated for root@localhost: ?wxxx mysql的文件夹名字最好除掉,-, .这样的字符, 网上有其它安装帖子说

在Windows下使用ffmpeg分割视频方法

  和ubuntu下一样,分割视频时都需执行下面的命令,不过windows下需要安装配置ffmpeg才能使用. ffmpeg -ss 01:00:00 -i input_file_h264.mp4 -vcodec copy -acodec copy -t 00:06:00 output_file.mp4 首先在官网下载windows版本的ffmpeg(选择Static版本),可根据你的系统情况下载32位或64位版本,完成后解压到你需要放置的目录位置(这里以D:Program Files为例).完

Windows下Apache应用环境塔建方法_win服务器

目的:为Apache,php配置受限制的用户权限 环境配置情况:apache安装目录:d:\www-s\apachephp目录:d:\www-s\php5mysql目录:d:\www-s\mysql网站根目录:d:\www\htdocs 专门为运行Apache运行所使用的用户:apache-u(可不隶属于任何用户组) PS:这里只说Windows下Apache应用环境相关的目录权限设置,至于其他基本的服务器目录权限设置就不提啦! Windows下Apache应用环境塔建目录安全设置操作步骤: 配

tomcat在windows下设置自动重启的方法

绿色版tomcat在windows下设置自动重启 首先下载tomcat,一定要下载有bin\service.bat文件的,并且要有tomcat.exe文件 首先是tomcat在F:\apache-tomcat-6.0.36\bin中的startup.bat能够自动启动,启动需要配置两个环境变量. a)AVA_HOME:F:\cds\jdk1.5.0_09(jdk位置) b)CATALINA_HOME:F:\cds\apache-tomcat-6.0.36(tomcat的位置,startup是启动

用cwrsync同步windows下数据的简单配置方法_win服务器

cwrsync下载地址 http://sourceforge.net/projects/sereds/files/cwRsync 或者到 s.jb51.net下载 cwrsync分客户端和服务端两部分,拿cwrsync 4.0.版来说,分别对应cwRsync_4.0.5_Installer.zip和cwRsyncServer_4.0.5_Installer.zip 安装: 客户端安装比较简单,一直下一步就可以了. 服务端安装到Service Account这一步的时候,这一步会建立cwrsync