firefox NPAPI 插件开发(c++)(一)

firefox NPAPI 插件开发(c++)(一) - dragoo747450的日志 - 网易博客

 

2012-07-11 22:23:00|  分类: 点点滴滴 |  标签: |字号大中小 订阅

1.创建1Win32 控制台应用程序,应用程序类型为DLL,附加选项为空项目

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客

2.项目-》右键-》配置属性-》常规-》字符集-》使用多字节字符集

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客

3.复制sdk\samples\npruntime文件夹下的np_entry.cpp,npn_gate.cpp,npp_gate.cpp

到nptest项目目录下,并添加到项目中

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客

其中np_entry.cpp

添加#include<stddef.h>

因为使用到offsetof

这时候编译一下,会报一堆错,同时项目属性里会出现c/c++选项
4.项目-》右键-》配置属性-》c/c++-》常规-》附加包含目录
添加
E:\firefox plugin\base\public
E:\firefox plugin\sdk\samples\include
也可以用相对目录,如果firefox plugin和nptest.vcproj是同一目录下,则路径为
firefox plugin\base\public
firefox plugin\sdk\samples\include

5.项目-》右键-》配置属性-》c/c++-》预处理器-》预处理器定义添加
XP_WIN
_X86_

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客


6.新建一nptest.def文件
编辑nptest.def为

LIBRARY    "nptest"

EXPORTS  
    NP_GetEntryPoints   @1  
    NP_Initialize       @2  
   NP_Shutdown         @3
7.添加一资源Version,保存

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客

在解决方案中右键nptest.rc,选择查看代码
BLOCK "080404b0" 改为
BLOCK "040904e4"

同时添加一value
VALUE "MIMEType", "application/test-plugin"

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客

8.复制sdk\samples\npruntime文件夹下的plugin.h,plugin.cpp到nptest项目目录下,并添加到项目中,编译plugin.cpp

如果报printf找不到,就把#include <stdio.h>添上吧

如果报error C3861: “SubclassWindow”: 找不到标识符,需要在plugin.cpp文件添加#include "stdafx.h",并且在

#ifdef XP_WIN

#include <windows.h>

#include <windowsx.h>

#endif

之前,即最开始



9.编译生成整个项目
10.编辑注册表
HKEY_CURRENT_USER\Software\MozillaPlugins下
新建子项@mozilla.com.cn/test
并新建字符串值“Path”设值为E:\hbj\test3\nptest\Debug\nptest.dll

firefox NPAPI 插件开发(c++) - dragoo747450 - 我的博客

打开火狐浏览器 在地址栏输入“about:plugins” 如果在plugin列表中有本例的npdemo.dll及说明我们的plugin示例已经成功完成,
PS:
1.如果没有,请再次查看BLOCK 的值是否是040904e4(仅仅是我遇到的)
2. 输入about:config设置plugin.expose_full_path 设为 true,可显示dll全路径

11.测试页面

<HTML>
    <HEAD>
    </HEAD>
    <BODY>
        <embed type="application/test-plugin">
    </BODY>
</HTML>

12.总结
实现firefox查找注册表,再找到dll,加载,通过NP_GetEntryPoints进入c++代码
ie的 activex也是要通过注册表或者路径找到dll加载,只不过通过其他入口进入c++代码

参考:
NPAPI开发详解,Windows版
http://mozilla.com.cn/post/21666/

NPAPI——实现非IE浏览器的类似ActiveX的本地程序(插件)调用 http://blog.csdn.net/zhouyuqwert/article/details/7387516
我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime
http://www.cppblog.com/epubcn/archive/2008/11/11/66612.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值