gpt4 book ai didi

c++ - Firefox 扩展/插件二进制组件向后兼容性

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:06 25 4
gpt4 key购买 nike

我一直在阅读并寻找为 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 不需要在 list 文件中包含 xpt 或 dll。

所以基本上我的问题是,为了向后兼容,制作可执行文件或继续制作二进制组件会更好吗? (因为它看起来像为 FF5 编译,FF3.6 坏了。)

最佳答案

您的错误消息应该是由于 XPT 文件没有被正确识别(Components.interfaces.IMyComponentundefined)。可能是因为它位于错误的目录中 - 在 Firefox 3.6 中,您无需在 chrome.manifest 文件中声明它,而是必须将其放在 compoments/ 中目录以及您的 dll 文件。

XPCOM 组件的向后兼容性故事从 Firefox 4 开始变得更糟,请参阅 https://developer.mozilla.org/En/Developer_Guide/Interface_Compatibility#Binary_Interfaces .理论上,如果您想支持多个 Firefox 版本,您需要将多个版本的 XPCOM 组件放入您的 XPI 包中,这对于每六周发布一次的版本来说需要付出很多努力。如果重点真的是从 native 库中调用一些函数,那么您应该认真考虑切换到 js-ctypes .您还可以随扩展一起提供 native 库(普通的,不是 XPCOM)并使用 js-ctypes 来调用它。 Firefox 从版本 4 (Gecko 2.0) 开始支持 js-ctypes,对于 Firefox 3.6,您仍然需要不同的解决方案。

关于c++ - Firefox 扩展/插件二进制组件向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6486192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com