自行设计NPAPI开发框架 (三)

2014-11-24 08:43:30 · 作者: · 浏览: 3
Info) { return; },即使是每次都复制,也显得不舒服,而有了nsPluginInstanceBase的封装,我们只需要在派生子类的时候不覆写这个虚函数即可。因此nsPluginInstanceBase可以说完美的封装了NPP_函数,让我们开发插件从如此繁琐的工作转化为仅仅只关注功能的实现。
添加了类的实现方式,我做了一个与前面类似的插件,是的bemo,beta版的demo。代码请参考本文提供的附件。下载地址:http://download.csdn.net/detail/z6482/4913883
插件接口脚本化
Scriptable plugin,完整的表述应该叫具有脚本化 编程接口的插件(cross-browser NPAPI extensions, commonly called npruntime,跨 浏览器NPAPI扩展功能,通常称为npruntime。总之就是为普通的插件增加了可以在JS脚本中访问的接口和属性)。
简单描述一下整个过程,当浏览器发现JS中在调用插件对象的某些接口或属性的时候,就会调用NPP_GetValue来获取一个NPObject的对象,而这样一个对象我们是通过调用NPN_CreateObject来创建,并调用NPN_RetainObject来获取并返回给浏览器。浏览器根据得到的这个对象,调用该对象的HasProperty、GetProperty、SetProperty等等来进行相关的操作。当然不需要了的时候我们需要调用NPN_ReleaseObject来通知浏览器释放该对象,该操作一遍在实例的析构函数中进行。
添加脚本化接口也不难,创建一个类似于nsPluginInstanceBase的类nsScriptObjectBase类,该类需要派生自NPObject类,还需要有一个NPP对象来保存其对应的插件实例。仿照npruntime实例代码写出来,在文件中做了一些修改:将所有全局变量全部做完类的static成员变量。并进行一些简单的测试,最终生成一个可用的既能够用于开发一般插件又可以开发具有脚本化接口插件的框架,主要有三个文件:npfrmwk.h、npfrmwkbase.h和npfrmwk_entry.cpp。一切尽在代码中。下一小节结合本小节生成脚本化接口插件简要介绍如何利用本框架来开发NPAPI插件。本小节与下一小节的代码为同一个:demo_frmwk
框架使用说明
手动创建文件(rc文件),也可以在项目创建好之后在VS中添加新建文件,demo太多了,故将本demo命名为fdemo,生成dll命名为npfdemo.dll,
创建文件npfdemo.rc。内容如下:
[cpp]
#include
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "JumuFENG.zcf.org"
VALUE "FileDescription", "demo plugin for our own NPAPI framework"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "npfdemo.dll"
VALUE "LegalCopyright", "Copyright (C) 2012"
VALUE "MIMEType", "application/x-frmwk-demo"
VALUE "OriginalFilename", "npfdemo.dll"
VALUE "ProductName", "Test Plug-in"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
#include
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "JumuFENG.zcf.org"
VALUE "FileDescription", "demo plugin for our own NPAPI framework"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "npfdemo.dll"
VALUE "LegalCopyright", "Copyright (C) 2012"
VALUE "MIMEType", "application/x-frmwk-demo"
VALUE "OriginalFilename", "npfdemo.dll"
VALUE "ProductName", "Test Plug-in"
VALUE "Produc