activex和npapi区别与npapi是不是重复了

NPAPI介绍(1)
贡献者:yuandaqing2014
本站编辑:杭州厨师培训
NPAPI的简介 NPAPI全称为:Netscape Plugin Application Programming Interface (NPAPI), Netscape Navigator 浏览器早已离我们远去,但Netscape plug-in 却还顽强的活着,并且成为绝大多数浏览器都支持的跨平台插件标准,其中最常见的N插件莫过于 Flash 了,想想满世界的类 “Youtube” 你就知道了。 现在 Qt 4.5 中支持了N插件,最直观的改变就是在 Qt Demo Browser 中原本应该显示 Flash 的位置不会再是一片空白了。(这段是抄袭别人的^_^). 现在支持NPAPI的浏览器有, project applications, including and up to 5.5SP2 在linux下,必须实现的接口函数 char* NP_GetMIMEDescription() NPError NP_GetValue() NPError NP_Initialize() NPError NP_Shutdown() 我们看看npfunctions.h头文件里面怎么定义这些函数的
延伸阅读精彩推荐
厨师培训手册_企业管理_经管营销_专业资料
暂无评价|0人阅读|0次下载|举报文档厨师培训手册_企业管理_经管营销_专业资料。文档贡献者 我 贡献于2013-12...
厨师培训资料_企业管理_经管营销_专业资料。厨师培训资料历史悠久的中国烹饪 中国烹饪,历史悠久,技艺精湛。经过数千年的发展,当今的中国菜肴不仅是精美的食品,在一定意...
西餐培训手册_企业管理_经管营销_专业资料。餐饮培训红馆咖啡· 红馆咖啡·西餐厅 咖啡 员工培训手册 2010 年 6 月 1 日 目一 二三 四五六七八九 录 仪容仪...
(六)服务人员的气质美 六、 七、 服务人员必须学会的礼仪服务 餐厅接待服务培训餐厅摆台 摆台规范 五 餐厅摆台规范 斟酒服务规范 六 斟酒服务规范 七、西餐服务...
精彩看点猜你喜欢
中国川菜文化摘要: 川菜是对我国西南地区四川和重庆等地具有地域特色的饮食的统称, 川菜最 大的特点是&一菜一格,百菜百味&.川菜以成都、重庆、川南三个地方菜...
家常川菜做法大全_经管营销_专业资料。川菜乃是我国的八大菜系之一,它是色、香、味俱全,有了它,就能丰富你的餐桌。家常川菜做法大全豉汁蒸排骨 菜系: 时间: ...
鲁菜_自然科学_专业资料。 起源: 鲁菜是由济南和胶东地方菜所组成,宋以后鲁菜就成为“北食”的代表。明、清两代,鲁菜已成宫廷御膳主体,对京、津东北各地的影响...
京菜就是鲁菜_文化/宗教_人文社科_专业资料。京菜就是鲁菜作者:丁丁哥 2007 年 12 月 15 日 八十年代初,有次我大爷来北京,那时我在北京,我是东道,我带着...
经典粤菜大集锦粤菜,即广东地方风味菜,有着悠久的历史,以特有 的菜式和韵味,独树一帜,中国汉族八大菜系之一,发源 于岭南,在国内外享有盛誉。粤菜是一种文化,...
粤菜_育儿理论经验_幼儿教育_教育专区。简要介绍我国八大菜系之中的粤菜粤菜,即广东地方风味菜,是我国著名八大菜系之一,它以特有的菜式和韵 味,独树一帜,在国...
苏菜擅长炖、焖、蒸、炒,重视调汤,保持原汁,风味清鲜,浓而不腻,淡而不薄, 酥松脱骨而不失其形,滑嫩爽脆而不失其味。 苏菜由杨州菜、南京 菜、苏州菜、...
苏菜特点_育儿理论经验_幼儿教育_教育专区。菜肴特点据杭州徐珂所辑《清稗类钞》中记载&肴馔之各有特色者,如京师、山东、四川、广东、 福建、江宁,苏州、镇江、...trackbacks-0
&&&& 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题。在有特殊需求(如涉及数据安全的金融业务数据交互、需插件才能实现的与本地设备的交互等)的情况下可以酌情慎用。 &&&& 浏览器插件总体可以划分为两大阵营,即IE支持的插件以及非IE支持的插件。本来在Netscape时代,对于浏览器插件是有公用的规范的(NPAPI),一开始所有浏览器都支持该规范,包括IE。后来出于商业原因,微软的IE不再支持NPAPI,改而自己开发了一套基于COM的ActiveX体系,但这个体系对于非IE浏览器是拒绝支持的。所以目前的状况基本是,IE浏览器仅支持ActiveX控件,而Firefox、Chrome等浏览器只支持另一类接口(XPCOM或NPAPI)。要想实现一个Web插件,至少需要同时考虑IE支持的AceiveX版以及非IE支持的Plugin版(Flash等插件对于IE与非IE浏览器都是不同的)。 &&&& ActiveX的开发可以用C#、VB及C++等语言。用C++开发ActiveX既可以使用ATL,也可以使用MFC。ATL ActiveX输出文件较小,适合网络传输,但开发复杂度稍大;而MFC ActiveX输出文件稍大(附带必要的MFC dll),但易于上手。本文主要介绍基于MFC的ActiveX开发。 一、创建项目及添加接口 &&&& 在Vs.net 2008中,新建一个MFC ActiveX Control项目: &&&&&&&&&&&&&&&&&&&&&&&&&&
&&& 点击“OK”后将弹出如下对话框: &&&&&&&&&&&&&&&&&&&&&&&&&&
&&& 依次点击“Next”按钮直到“Control Settings”标签页: &&&&&&&&&&&&&&&&&&&&&&&&&&
&&&& 由于本例子只演示仅提供函数接口不基于界面的ActiveX,故“Create control based on”选择“(none)”即可。点击"Finish”按钮,即完成了项目的创建,文件结构如下: &&&&&&&&&&&&&&&&&&&&&&&&&&&
&&& 右击项目名称,选择“Properties”,在项目属性对话框中对“All Configurations”进行配置。在“Configurations Properties-&General”标签页中,“Use of MFC”选择“Use MFC in a static Library”,以便编译时将MFC相关库自动和控件一起打包。对于“Character Set”的选择根据具体情况而定,须注意“Unicode Character Set”和“Mulity-Byte Character SEt”对字符处理是完全不一样的(字符编码不一样,需要进行MultiByteToWideChar或WideCharToMultiByte转换)。 注意:创建MFC ActiveX Control时已经自动给项目添加了.def文件并做好了相应关联。若对配置信息更改后导致编译的ocx注册不成功或提示找不到EntryPoint,可以检查一下Linker-&Input的Module Definition File是否配置正确,正常情况下已经自动配置好了,如下图:
&&&&&&&&&&&&&&&&&&
&& 接下来就可以在ActiveX中添加我们需要与外部交互的接口方法和属性了。选择“Class View”,右击“MyTestActiveXLib-&_DMyTestActiveX”,在弹出的菜单中可以选择Add Function或Add Property来添加接口方法或接口属性:
&&&&&&&&&&&&&&&&&&
&& 这里以定义一个LONG AddFun(LONG num1,LONG num2) 的接口函数为例,添加Menthod如下图所示:
&&&&&&&&&&&&&&&&&&
&&& 点击Finish后,即可在“MyTestActiveXCtrl.cpp”文件找到刚添加的接口函数代码:
&&&&&&&&&&&&&&&&
&&&& 在函数体中完成自定义的业务逻辑即可。
二、实现安全接口
&&&&& 上述项目编译后即可生成ocx文件,该ocx即可嵌入html在IE中运行。但如果该ocx对应页面是放在真实的web服务器上,访问该页面执行ActiveX里对应接口时IE将会提示“无相关属性,需要设置其初始化和脚本运行的安全性”等信息。这是因为ActiveX要在远程IE上执行,需要实现安全接口。有关控件的初始化和脚本安全问题,《》一文及其引用的Microsoft文章做了较详致描述。
&&&&& 对于ATL写的ActiveX,实现IObjectSafety即可,有ATL实现安全接口的详细的描述。
&&&&& 对于MFC写的ActiveX,可以通过修改注册表的方式来实现控件的安全性,微软也提供的。具体实现步骤如下:
&&&&& 1、首先在项目中添加Cathelp.h和Cathelp.cpp两个文件,其内容如下所示。
&&&&& Cathelp.h
#include "comcat.h"
// Helper function to create a component category and associated
// description
HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription);
// Helper function to register a CLSID as belonging to a component
// category
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid);
// HRESULT UnRegisterCLSIDInCategory - Remove entries from the registry
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid);
&&&&& Cathelp.cpp
#include "stdafx.h"
#include "comcat.h"
#include "strsafe.h"
#include "objsafe.h"
// HRESULT CreateComponentCategory - Used to register ActiveX control as safe
HRESULT CreateComponentCategory(CATID catid, WCHAR *catDescription)
ICatRegister *pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (FAILED(hr))
// Make sure the HKCR\Component Categories\{..catid...}
// key is registered.
CATEGORYINFO
catinfo.catid =
catinfo.lcid = <span style="color: #x0409 ; // english
// Make sure the provided description is not too long.
// Only copy the first 127 characters if it is.
// The second parameter of StringCchLength is the maximum
// number of characters that may be read into catDescription.
// There must be room for a NULL-terminator. The third parameter
// contains the number of characters excluding the NULL-terminator.
hr = StringCchLength(catDescription, STRSAFE_MAX_CCH, &len);
if (SUCCEEDED(hr))
if (len&<span style="color: #7)
len = <span style="color: #7;
// TODO: Wr
// The second parameter of StringCchCopy is 128 because you need
// room for a NULL-terminator.
hr = StringCchCopy(catinfo.szDescription, len + <span style="color: #, catDescription);
// Make sure the description is null terminated.
catinfo.szDescription[len + <span style="color: #] = '\0';
hr = pcr-&RegisterCategories(<span style="color: #, &catinfo);
pcr-&Release();
// HRESULT RegisterCLSIDInCategory -
Register your component categories information
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
// Register your component categories information.
ICatRegister *pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
// Register this category as being "implemented" by the class.
CATID rgcatid[<span style="color: #] ;
rgcatid[<span style="color: #] =
hr = pcr-&RegisterClassImplCategories(clsid, <span style="color: #, rgcatid);
if (pcr != NULL)
pcr-&Release();
// HRESULT UnRegisterCLSIDInCategory - Remove entries from the registry
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
ICatRegister *pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
// Unregister this category as being "implemented" by the class.
CATID rgcatid[<span style="color: #] ;
rgcatid[<span style="color: #] =
hr = pcr-&UnRegisterClassImplCategories(clsid, <span style="color: #, rgcatid);
if (pcr != NULL)
pcr-&Release();
&&& 注:Cathelp.cpp中的代码是基于Unicode Character Set的。故项目配置时若改成Multi-Byte Character Set,需对Cathelp.cpp中代码做相应修改,否则编译不过;
&&&& 2、在MyTestActiveX.cpp文件中,添加CLSID_SafeItem的定义:
&&&& CLSID_SafeItem的值是根据xxxCtrl.cpp(本例中是MyTestActiveXCtrl.cpp)文件中IMPLEMENT_OLECREATE_EX的定义而来的(实际上就是ActiveX的CLASSID)。本例中MyTestActiveXCtrl.cpp文件中IMPLEMENT_OLECREATE_EX的的值如下:
&&&& 将“<font color="#ff5c26b, 0xe979, 0x45a5, 0x99, 0x7d, 0x94, 0x27, 0xfb, 0x81, 0xe7, 0x7”简单的在适当位置添加“{”和“}”括弧即变成了CLSID_SafeItem的值“<font color="#ff5c26b, 0xe979, 0x45a5, {0x99, 0x7d, 0x94, 0x27, 0xfb, 0x81, 0xe7, 0x7}”。
&&&&& 另外,MyTestActiveX.cpp文件起始处还需要引入如下两个文件方能正常编译:
&&&&& &&&&&&
&&& 3、修改MyTestActiveX.cpp中DllRegisterServer和DllUnregisterServer函数,代码如下(照抄即可):
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
// HResult used by Safety Functions
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);
// Mark the control as safe for initializing.
hr = CreateComponentCategory(CATID_SafeForInitializing,
L"Controls safely initializable from persistent data!");
if (FAILED(hr))
hr = RegisterCLSIDInCategory(CLSID_SafeItem,
CATID_SafeForInitializing);
if (FAILED(hr))
// Mark the control as safe for scripting.
hr = CreateComponentCategory(CATID_SafeForScripting,
L"Controls safely
scriptable!");
if (FAILED(hr))
hr = RegisterCLSIDInCategory(CLSID_SafeItem,
CATID_SafeForScripting);
if (FAILED(hr))
return NOERROR;
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
AFX_MANAGE_STATE(_afxModuleAddrThis);
// 删除控件初始化安全入口.
HRESULT hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);
if (FAILED(hr))
// 删除控件脚本安全入口
hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);
return NOERROR;
& 注: 很多例子里DllUnregisterServer的写法与本文的写法不一致,结果导致卸载控件时(regsvr32 /u xxxx.ocx)出现“调用某某ocx文件的DllUnregisterServer函数出错,错误代码:0x”错误。究其根源,是DllUnregisterServer中删除注册表的顺序出了问题,“”中对此做了详尽描述。
&&& 4、在解决方案下点击资源文件(Resources-&MyTestActiveX.rc),点击右键在弹出的菜单中选择“View Code”, 编辑资源文件信息并确保以下几个项目的正确性:
&&&&&&& a) BLOCK的值为“”
&&&&&&& b) OLESelfRegister的值为“\0”
&&&&&&& c) VarFileInfo中的Translation后对应为“0x”
&&&&& 到目前为止,可以编译项目,输出的ocx控件是可以正常运行的了。~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MFC ActiveX开发参考资料:
ATL ActiveX开发参考资料:
综合参考资料:
阅读(...) 评论()用MFC开发NPAPI插件解决方法 - VC/MFC当前位置:& &&&用MFC开发NPAPI插件解决方法用MFC开发NPAPI插件解决方法&&网友分享于:&&浏览:581次用MFC开发NPAPI插件能否使用MFC来开发NPAPI插件呢?现在项目需求是从IE ActiveX迁移到FireFox上,因为涉及到很多GUI,全部使用SDK来开发的话非常麻烦,能否在插件中添加MFC支持呢?非常感谢 :)------解决方案--------------------
有界面的话不行。FF上面的界面只能用FF提供的方式来写,用MFC行不用。NPAPI只支持后台式的C++调用。或者你将你的模块写成DLL通过NPAPI来调用也行。
------解决方案--------------------
NPAPI需要按照FIREFOX的规范,不能直接使用MFC,但是可以把功能做到dll
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有Adobe Flash Player 16 Activex和NPAPI有什么区别_百度知道
Adobe Flash Player 16 Activex和NPAPI有什么区别
提问者采纳
PAPI版不建议使用
来自团队:
相关专业回答
直接安装adobe flah player,是因为安装adoble flash player这种用于网页的插件比较特殊,所以直接安装,装上了也不能正常运行!可以先到软件管家中去下载专门的adobe flash player卸载uninstall工具卸载,再用搭桥过河的方法,来装你的adoble flash player。
具体操作是,安装一个低版本的Adobe Reader 9.0。安装完后会提示你是否选择自动升级,选是它...
其他类似问题
为您推荐:
npapi的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 flash npapi与activex 的文章

 

随机推荐