Using the Gecko SDK 编辑
This guide explains how to build XPCOM components in C++ using the Gecko SDK.
Introduction
It is assumed that you already know something about XPCOM component development. (More information on XPCOM is available at the XPCOM project page.) The intent of this guide is to help you build your components "the right way" such that they will remain compatible with future versions of Mozilla. For information on how to retrieve and install the Gecko SDK, see here.
An XPCOM component will be compatible with future versions of Mozilla if it only makes use of frozen Gecko APIs. A frozen Gecko API is one that is included in the Gecko and marked frozen with the text <tt>@status FROZEN</tt> (with NSPR as the exception to the rule).
The frozen Gecko API consists of a set of component interfaces (C++ vtables) and <tt>extern "C"</tt> symbols exported from the XPCOM library and the NSPR libraries. The ABI of the component interfaces depends on the C++ ABI of the host compiler (i.e., the vtable format and calling conventions of the virtual methods may vary from compiler to compiler). The Gecko ABI is therefore compiler sensitive. (<tt>about:buildconfig</tt> can be loaded in Mozilla to reveal details about the compiler that was used.)
For the remainder of this guide, we'll assume you are developing components under Linux. (Ports of this guide are welcome.)
A "frozen" interface or function is guaranteed to be supported by future versions of same major version of the platform. The SDK contains headers for all of the frozen interfaces and functions, and it also contains headers for classes and functions defined in the glue libraries. When those classes or functions are used, the component must link with the corresponding static library. Every frozen interface or function will be labeled as such in the IDL or header file with "@status FROZEN
". (NOTE: NSPR is the one exception to this rule. All NSPR functions are frozen by default and are not marked as such in the respective header files.)
The glue library exists to make common tasks easier. For example, the nsCOMPtr
class is defined in the XPCOM glue library. If your component does not use any of the glue classes or functions, then you do not need to link against the glue library.
Work in progress...
Linking
(Link line, version script to only expose NSGetModule, etc.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论