自行设计NPAPI开发框架 (四)
tVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END
该文件可以由VS新建,但需要修改相应块描述中的值为上述内容,当然CompanyName等条目需根据实际情况修改为你想设定的值。
创建好上述文件之后,打开VS(我用的是VS2010)创建一个win32应用程序,设置中选择创建dll。注意勾选上空项目。创建好项目之后。即可向该项目添加现有项,选择添加本文提供的三个框架文件:npfrmwk.h、npfrmwkbase.h、npfrmwk_entry.cpp以及前面创建的文件npfdemo.rc。接着添加新建项,添加def文件。npfdemo.def文件内容如下:
LIBRARY NPFDEMO
EXPORTS
NP_GetEntryPoints @1
NP_Initialize @2
NP_Shutdown @3
NP_GetMIMEDescription @4
添加完毕之后,为该项目添加一个新的派生自nsPluginInstanceBase的类:CFrmwkPlugin,已经自动将头文件命名为FrmwkPlugin.h实现文件命名为FrmwkPlugin.cpp了,我们要在这里新建两个类,一个是CFrmwkPlugin类另一个是派生自nsScriptObjectBase的 CScriptPluginObject类。设置项目属性,添加npapi的头文件包含目录,在属性->C/C++->附加包含目录中添加,当然你也可以将npapi.h、npruntime.h、npfunctions.h这些文件直接复制到项目中如上述一样添加到项目中,而不添加附加包含目录。
接下来将刚才创建的FrmwkPlugin.h文件和FrmwkPlugin.cpp文件进行修改,主要就是实现两个类中必须实现的函数以及几个相当于全局函数的静态成员函数,代码就不复制到这里来了,请参考本文提供的代码进行实现吧!
文件中采用预编译指令区分是否编译脚本化接口,如果需要编译支持脚本化接口则需要设置属性->预处理器->预处理定义中添加ENABLE_SCRIPT_OBJECT,当然也可以在源文件中适当位置添加#define ENABLE_SCRIPT_OBJECT达到同样的效果。不需要编译脚本化接口则不需要这些操作,直接编译生成即可。
如图是该工具的一个截图:
需要填写的信息包括文件名,mimetype类型,以及插件实例类名称,其他各项都有预设默认值,或者会根据填写这几项信息时自动填写相关信息。自动填写或预设默认值都可以手动修改。
最上面一行可以选择生成的文件类型,选择第一项则生成的文件中不包含scriptable的接口,文件非常简洁。选择第二项则生成包含scriptable相关的内容,而且没有添加ENABLE_SCRIPT_OBJECT预编译宏;选择第三项则会生成带 ENABLE_SCRIPT_OBJECT预编译宏的文件,默认是不支持脚本化接口的。要使其支持只需要在项目属性中设置预编译宏ENABLE_SCRIPT_OBJECT即可。 www.2cto.com
复选框生成VS工程选项可选择是否生成VS2010版的项目文件,若选择该项则自动选择将框架文件同时生成在项目文件中,生成的项目文件可以直接用VS2010打开,设置好包含目录之后即可生成最简单的插件dll。也可以在VS中将该项目添加到其他解决方案中。若不选择该项,则生成必要的文件,自行创建新的项目,这种方式可以用于其他版本的VS,但需要注意def文件不能直接在新建的项目中添加现有项来完成,否则生成的dll在测试页面中会有问题,正确的做法是用VS添加新建项,添加一个空白的def文件,然后将本工具生成的def文件内容复制到空白def文件中;其他文件则可以直接在VS中添加现有项来进行。建议不要用本工具生成VS项目,因为每个项目文件都有不同的GUID,而本工具没有自动生成GUID的功能,其中使用的GUID是试验的时候创建项目所采用的GUID。