FireFox的插件示例
首先在VS2015创建新项目nprt(np开头),选择C++->Win32项目,下一步,选择DLL,空项目即可。
解压拿到plugin文件夹后,放到nprt项目目录下。
在nprt中添加现有项,找到plugin\sdk\samples\npruntime,添加np_entry.cpp、npn_gate.cpp、npp_gate.cpp、nprt.def、nprt.rc、plugin.cpp、plugin.h、resource.h。
nprt.def是一个模块定义文件。它被用于导出一个DLL的函数,和__declspec(dllexport)很相似,但是.def文件并不是Microsoft定义的。一个.def文件中只有两个必需的部分:LIBRARY 和 EXPORTS。
nprt.def:
LIBRARY NPRT
EXPORTS
NP_GetEntryPoints @1
NP_Initialize @2
NP_Shutdown @3
dll导出的函数必须是NP_GetEntryPoints、NP_Initialize、NP_Shutdown是这三个,这是火狐浏览器能够识别的在个接口,具体说明在插件的生命周期中说明。(引用http://blog.csdn.net/fancycow/article/details/7261191)
nprt.rc、resource.h是资源文件,在项目中右键->添加->资源 就能获得。我们主要看的是nprt.rc,选中点击->查看代码
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "Comments", "\0"
VALUE "CompanyName", " \0"
VALUE "FileDescription", "nprt\0"
VALUE "FileExtents", "rts\0"
VALUE "FileOpenName", "nprt\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "nprt\0"
VALUE "LegalCopyright", "Copyright ?1999\0"
VALUE "LegalTrademarks", "\0"
VALUE "MIMEType", "application/mozilla-npruntime-scriptable-plugin\0"
VALUE "OriginalFilename", "nprt.dll\0"
VALUE "PrivateBuild", "\0"
VALUE "ProductName", "npruntime scriptable example plugin\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
VALUE "SpecialBuild", "\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
就看这一段。
BLOCK “040904e4” 代表英语(美国)
VALUE “MIMEType”, “application/mozilla-npruntime-scriptable-plugin\0” 一定要有,浏览器通过MIMEType检查是否有匹配插件
修改并保存后,我们来配置一下项目设置。右键->属性。平台Win32
常规:字符集使用多字节字符集。
VC++目录:包含目录添加E:\VSCode\nprt\plugin\base\public
C/C++->预处理器:预处理器定义添加:
XP_WIN32,MOZILLA_STRICT_API,XPCOM_GLUE,XP_WIN,X86
应用->确定。
好了,配置完成,编译试试。
问题:“printf”: 找不到标识符
解决:添加#include "stdio.h"
重新生成。ok,我通过了!将生成的nprt.dll放到FireFox的plugins文件夹内(没有就新建一个)
在FireFox浏览器地址栏键入:
about:plugins
可以看到npruntime scriptable example plugin
如果没有,没关系,在地址栏键入about:plugins,新建->布尔,名称plugin.expose_full_path,值是true
打开注册表编辑器regedit,在
HKEY_CURRENT_USER\Software\MozillaPlugins添加@mozilla.com.cn/test ,在右侧新建->新字符串值,名称Path,数据D:\FireFox\plugins\
OK!about:plugins
贴几个参考链接:
http://blog.csdn.net/willy16/article/details/8725338
http://www.cppblog.com/epubcn/category/8842.html
http://blog.csdn.net/fancycow/article/details/7261191