我需要为Thunderbird编写扩展程序。该扩展将用于进行一些文本挖掘并依赖于本机C ++代码。根据我的理解,Thunderbird扩展现在主要用JavaScript编写,而XPCOM正在慢慢弃用(https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM)。
此外,XPCOM似乎有点沉重,我想要一个更容易的途径来访问我的C ++代码。除了XPCOM之外还有其它方法可以从雷鸟扩展中访问C ++代码吗?
谢谢!
答案 0 :(得分:0)
看看js-ctypes(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 ++编译器会对名称进行重命名,因此您的函数名称可能是' concatStrings'在C ++代码中,但在汇编时它可能类似于' _123concatStrings'。为了防止这种情况,请声明您的功能:
extern "C" const char * concatStrings ( const char * str1, const char * str2 );