VS2008编译Firefox插件npruntime
时间:2010-10-06 来源:eping
Compiling The npruntime Sample Plugin in Visual Studio
Eping
前言:对于初学FF插件开发的同学来说,只能看Mozilla Developer的官方文档,当然也不少中文博客可以参考,本文参考官方文档并加少许个人编译心得体会。原文链接:
https://developer.mozilla.org/en/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio
开发准备:装有VS的机器一台、安装Firefox3.0、或Firefox3.6目前最新版Firefox 4.0版本人测试没有通过,如果测试通过的欢迎与本人分享 mail:[email protected]
开发之旅:
1、使用VS2008创建Win32 Dll空项目nprt,在应用程序类型里选择DLL,附加选项中选中空项目。
2、项目名最好以np开头,否则当你最后生成的dll文件后,也将使用np开头。原因:Mozilla这么规定。
3、去http://mxr.mozilla.org/mozilla-central/source/modules/plugin/sdk/samples/把Mozilla官方提供的npruntime例子里的代码(.cpp .h .rc .def文件)下载下来。打开文件后点Raw file(右上角)即可拷贝源码。如图 1-1所示
图 1-1
4、把下载下来的源代码添加到nprt项目中去。
np_entry.cpp npn_gate.cpp npp_gate.cpp plugin.cpp
plugin.h resource.h 还有资源文件nprt.rc
5、下载Gecko SDK
下载链接:https://developer.mozilla.org/en/Gecko_SDK
版本的选择很重要 Gecko 1.9 (Firefox 3.0) 这个版本的SDK才能编译本文所示代码。xulrunner-1.9.0.17.en-US.win32.sdk.zip 更高级的两个版本都不能编译通过。
6、 把Gecko SDK 头文件目录添加到nprt项目中。
Project Properties|(all configurations)|C++|General|
Additional Include Directories 中添加以下(注:应该先把.cpp .h添加到项目中,否则项目属性那里可以显示不出来C++这个选项)
C:\xulrunner-1.9.0.17\xulrunner-sdk\include
C:\xulrunner-1.9.0.17\xulrunner-sdk\include\plugin
C:\xulrunner-1.9.0.17\xulrunner-sdk\include\nspr
C:\xulrunner-1.9.0.17\xulrunner-sdk\include\java
7、添加预处理器定义
Project Properties|(all configurations)|C++|Preprocessor|
Preprocessor Definitions
添加内容:WIN32;_WINDOWS;XP_WIN32;MOZILLA_STRICT_API;XPCOM_GLUE;
XP_WIN;_X86_;NPSIMPLE_EXPORTS
8、禁用预编译头文件
Project Properties|(all configurations)|C++|
Precompiled headers|Create/Use precompiled header
不使用预编译头
9、定义函数导出文件 .def
Project Properties|(all configurations)|Linker|Input|
Module Definition File
如我们添加的 nprt.def
10、删除npp_gate.cpp文件里的NPP_GetJavaClass函数
11、在plugin.cpp 文件里的PluginWinProc函数中的DrawText改为DrawTextA,unicode编译原因。
12、编译。
13、编译成功后可以在debug目录找到nprt.dll,并把它拷贝到Mozilla Firefox安装目录plugins文件夹下。
14、打开firefox 在地址栏中输入 about:plugins 可以看到我们安装的plugins 如图1-2所示
图 1-2
15、下载npruntime例子里的test.html
http://mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/test.html?raw=1
16、确保nprt项目中.rc文件和npp_gate.cpp中的mimetype类型跟test.html中的embed中的mimetype类型匹配。
17、用firebox打开test.html测试结果如下图1-3所示。
图 1-3