首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建Thunderbird原生扩展?

如何创建Thunderbird原生扩展?
EN

Stack Overflow用户
提问于 2016-12-14 17:04:36
回答 1查看 161关注 0票数 0

我需要为Thunderbird写一个扩展。该扩展将用于执行一些文本挖掘,并依赖于本机C++代码。据我所知,雷鸟扩展现在主要是用JavaScript编写的,而XPCOM正在慢慢被弃用(https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM)。

此外,XPCOM看起来有点笨重,我想要一种更容易访问C++代码的方法。除了XPCOM之外,是否还有其他方法可以从thunderbird扩展访问C++代码?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2016-12-30 05:06:16

看看js-ctype (https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes)

小例子:

代码语言:javascript
运行
复制
Components.utils.import("resource://gre/modules/FileUtils.jsm");
Components.utils.import("resource://gre/modules/ctypes.jsm")

// path to C++ lib (/home/username/.thunderbird/PROFILE/extensions/EXTNAME/components/lib.so)
var libPath = FileUtils.getFile("ProfD", ["extensions", "EXTNAME", "components", "lib.so"]);

var lib = ctypes.open(libPath.path);
var libFunction = lib.declare("concatStrings", // function name in C++ code
                              ctypes.default_abi,
                              ctypes.char.ptr, // return value
                              ctypes.char.ptr, // param1
                              ctypes.char.ptr // param2
);
var ret = libFunction("abc", "efg");
lib.close()

还要注意的是,由于函数重载,C++编译器确实会导致名称损坏,因此在C++代码中,您的函数名可能是'concatStrings‘,但在汇编中,它可能类似于'_123concatStrings’。为了防止这种情况,请像这样声明您的函数:

代码语言:javascript
运行
复制
extern "C" const char * concatStrings ( const char * str1, const char * str2 );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41138550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档