上篇记录了XPCOM的js的实现,较简单。本篇用C++实现。
ffos (gecko):如何在gecko 中编写XPCOM组件(一)--javascript 实现方式
ffos(gecko):gecko下XPCOM组件开发参考文档(合)
同js的实现一样,在gecko/dom/下新建一个目录simplecpp/
C++ 组件编写
在gecko/dom/下新建一个文件夹,simplecpp,将simplecpp添加到gecko/dom/moz.build下。
DIRS += [ ... 这里省略很多目录... 'simplecpp', ] |
最后整个目录结构如下:
simplecpp/ ├── moz.build ├── nsISimplecpp.idl ├── Simplecpp.cpp └── Simplecpp.h
|
(1)nsISimplecpp.idl接口定义
nsISimplecpp.idl #include "nsISupports.idl" [scriptable, uuid(fd306b58-02de-4dc7-a512-f1ade5cf6840)] interface nsISimplecpp : nsISupports { attribute string yourName; void write( ); void change(in string aValue); void usecomponent(in string aValue1); };
|
(2)Simple.h
nsISimplecpp.h是nsISimplecpp.idl 生成的头文件,它在objdir-gecko/dist/include/下。文件里面包含了组件实现文件的头文件模板和cpp文件模板。将/*Header file*/开始的代码复制到实现文件的头文件中,
/* Use the code below as a template for the implementation class for this interface. */
/* Header file */ 从这里开始 class nsSimplecpp : public nsISimplecpp { public: NS_DECL_ISUPPORTS NS_DECL_NSISIMPLECPP
nsSimplecpp();
private: ~nsSimplecpp();
protected: /* additional members */ };
|
完整头文件如下:
#ifndef mozilla_dom_simplecpp_simplecpp_h #define mozilla_dom_simplecpp_simplecpp_h
#include "nsCOMPtr.h" #include "nsISimplecpp.h"
namespace mozilla { class nsSimplecpp final: public nsISimplecpp//从nsISimplecpp 接口类中继承一个类 { public: NS_DECL_ISUPPORTS NS_DECL_NSISIMPLECPP //static already_AddRefed<nsSimplecpp> FactoryCreate(); nsSimplecpp(); private: virtual ~nsSimplecpp(); protected: /* additional members */ }; |