2016-12-14 41 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);