【发布时间】:2011-06-26 19:30:52
【问题描述】:
我一直在阅读并研究为 Firefox 扩展编译二进制组件的方法。由于 Firefox 5 即将发布(6 和 7 即将推出),我想知道二进制组件是否值得再制作,或者只是使用独立的可执行文件来运行我想要的功能。
我有一个示例二进制组件要为 Firefox 5 编译,但是当我在 Firefox 3.6 上测试它时,我得到了这个错误:
[Exception... "Could not convert Native argument arg 0 [nsISupports.QueryInterface]" nsresult: "0x8057000a (NS_ERROR_XPC_BAD_CONVERT_NATIVE)"
运行这段代码
var obj = Components.classes['@example.com/MyComponent;1'].QueryInterface(Components.interfaces.IMyComponent);
以及 QueryInterface 的错误。显然是为 Firefox 4 构建的(XULrunner-sdk 2.0 而不是 5.0 可以工作)。
这是模块代码:
#include "mozilla/ModuleUtils.h"
#include "MyComponent.h"
NS_GENERIC_FACTORY_CONSTRUCTOR(MyComponent)
NS_DEFINE_NAMED_CID(MY_COMPONENT_CID);
static const mozilla::Module::CIDEntry kMyComponentCIDs[] = {
{ &kMY_COMPONENT_CID, false, NULL, MyComponentConstructor },
{ NULL }
};
static const mozilla::Module::ContractIDEntry kMyComponentContracts[] = {
{ MY_COMPONENT_CONTRACTID, &kMY_COMPONENT_CID },
{ NULL }
};
static const mozilla::Module kMyComponentModule = {
mozilla::Module::kVersion,
kMyComponentCIDs,
kMyComponentContracts,
NULL
};
NSMODULE_DEFN(NS_MyComponent_Module) = &kMyComponentModule;
NS_IMPL_MOZILLA192_NSGETMODULE(&kMyComponentModule)
我还听说FF3.6 不需要在manifest 文件中包含xpt 或dll。
所以基本上我的问题是,为了向后兼容,制作可执行文件还是继续制作二进制组件更好? (因为看起来像是为 FF5 编译的,所以 FF3.6 坏了。)
【问题讨论】:
标签: c++ firefox firefox-addon components backwards-compatibility