我需要为Thunderbird写一个扩展。该扩展将用于执行一些文本挖掘,并依赖于本机C++代码。据我所知,雷鸟扩展现在主要是用JavaScript编写的,而XPCOM正在慢慢被弃用(https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM)。
此外,XPCOM看起来有点笨重,我想要一种更容易访问C++代码的方法。除了XPCOM之外,是否还有其他方法可以从thunderbird扩展访问C++代码?
谢谢!
发布于 2016-12-30 05:06:16
看看js-ctype (https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes)
小例子:
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’。为了防止这种情况,请像这样声明您的函数:
extern "C" const char * concatStrings ( const char * str1, const char * str2 );
https://stackoverflow.com/questions/41138550
复制相似问题