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