2016-12-14 116 views
0

我需要为Thunderbird写一个扩展。该扩展将用于做一些文本挖掘,并依赖于本机C++代码。据我了解,Thunderbird扩展现在大部分都是用JavaScript编写的,而XPCOM正在慢慢弃用(https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM)。如何创建一个Thunderbird原生扩展?

此外,XPCOM似乎有点沉重,我想要一个更简单的路径来访问我的C++代码。除了XPCOM之外,还有其他替代方案可以从Thunderbird扩展中访问C++代码吗?

谢谢!

回答

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);