製作 Firefox Plugin的幾個注意點
1) DLL文件必須以 np開頭(無大小寫要求),最好遵循 8.3格式(現在的 firefox沒有這個限制),比如說 npnul32.dll。
2) 在創建項目的時候,最好創建空的 DLL項目,否則要手動刪除它們,並修改 VC的一些設置,比較麻煩,不推薦。項目的名字最好是用 np打頭,這樣就免去修改生成 np打頭的 DLL文件的所有設置。
3) 編譯源代碼的時候,必須添加
MOZILLA_STRICT_API
XP_WIN
XP_WIN32
三個宏。
4)如果使用 *.def文件定義接口函數,那麼在 LIBRARY項,庫名必須和最終的 DLL文件名一致,比如說 NPNUL32。一般的格式如下:
LIBRARY NPNUL32
EXPORTS NP_GetEntryPoints @1 NP_Initialize @2 NP_Shutdown @3 |
5) 資源文件的創建。
A)必須添加 MIMEType項,比如說: VALUE "MIMEType", "application/x-java-applet"。
B)最好添加 FileExtents項,比如說 VALUE "FileExtents", "pdf"。
C)最好語言使用英文,如果中文的話,產生的 DLL很大。
D) FILEFLAGSMASK項可以考慮都 enabled,以免不必要的麻煩,比如說 FILEFLAGSMASK 0x3fL
E)在資源文件中,不要使用 afxres.h,用 winresrc.h代替;否則有可能生成的 DLL Firefox不認識。
下面是我做測試時候使用的一個 rc文件(我手工改了標準 VC2005產生的 version文件,裏面有些註釋我沒有改動,所以可能不正確,比如說“ Chinese (P.R.C.) resources”),請做參考。
// Microsoft Visual C++ generated resource script. // #include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "winresrc.h"
///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS
///////////////////////////////////////////////////////////////////////////// // Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32
#ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE //
1 TEXTINCLUDE BEGIN "resource.h/0" END
2 TEXTINCLUDE BEGIN "#include ""winresrc.h""/r/n" "/0" END
3 TEXTINCLUDE BEGIN "/r/n" "/0" END
#endif // APSTUDIO_INVOKED
///////////////////////////////////////////////////////////////////////////// // // Version //
VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904e4" BEGIN VALUE "FileDescription", "npwyq Dynamic Link Library" VALUE "FileExtents", "html|htm" VALUE "FileOpenName", "npwyq" VALUE "FileVersion", "1, 0, 0, 1" VALUE "InternalName", "npwyq" VALUE "LegalCopyright", "Copyright (C) 2009" VALUE "MIMEType", "application/x-wyq-plugin" VALUE "OriginalFilename", "npwyq.dll" VALUE "ProductName", " npwyq" VALUE "ProductVersion", "1, 0, 0, 1" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END
#endif // Chinese (P.R.C.) resources /////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. //
///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
|
6)在產生 DLL文件後,將它拷貝到 firefox的 plugins目錄中去,如果有相關的 *.xpt文件,請拷貝到 components中去。若此 DLL依賴於其他第三方的 DLL文件,則要將他們拷貝到與 firefox.exe的同一級目錄中去。關閉所有的firefox瀏覽器,然後再次打開。在地址欄中輸入about:plugins,檢查是否你的plugin已經註冊成功。
若對其中的其他細節感興趣,不妨參考: https://developer.mozilla.org/en/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio