NPAPI运行流程
2015-09-23 14:19
127 查看
从dll导出def文件可得
NP_GetEntryPoints @1
NP_Initialize @2
NP_Shutdown @3
NP_GetMIMEDescription
@4
函数1是浏览器获取插件回调函数,这些函数是由插件实现。
函数2是浏览器给插件设置回调函数,这些是浏览器实现的。
函数3是插件关闭的时候由浏览器调用。
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs)
{
if(pFuncs == NULL)
return NPERR_INVALID_FUNCTABLE_ERROR;
if(pFuncs->size < sizeof(NPPluginFuncs))
return NPERR_INVALID_FUNCTABLE_ERROR;
pFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
pFuncs->newp = NPP_New;
pFuncs->destroy = NPP_Destroy;
pFuncs->setwindow = NPP_SetWindow;
pFuncs->newstream = NPP_NewStream;
pFuncs->destroystream = NPP_DestroyStream;
pFuncs->asfile = NPP_StreamAsFile;
pFuncs->writeready = NPP_WriteReady;
pFuncs->write = NPP_Write;
pFuncs->print = NPP_Print;
pFuncs->event = NPP_HandleEvent;
pFuncs->urlnotify = NPP_URLNotify;
pFuncs->getvalue = NPP_GetValue;
pFuncs->setvalue = NPP_SetValue;
pFuncs->javaClass = NULL;
return NPERR_NO_ERROR;
}
NPP_New是浏览器调用创建插件的调用,从这里开始创建插件对象。
NP_GetEntryPoints @1
NP_Initialize @2
NP_Shutdown @3
NP_GetMIMEDescription
@4
函数1是浏览器获取插件回调函数,这些函数是由插件实现。
函数2是浏览器给插件设置回调函数,这些是浏览器实现的。
函数3是插件关闭的时候由浏览器调用。
NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs)
{
if(pFuncs == NULL)
return NPERR_INVALID_FUNCTABLE_ERROR;
if(pFuncs->size < sizeof(NPPluginFuncs))
return NPERR_INVALID_FUNCTABLE_ERROR;
pFuncs->version = (NP_VERSION_MAJOR << 8) | NP_VERSION_MINOR;
pFuncs->newp = NPP_New;
pFuncs->destroy = NPP_Destroy;
pFuncs->setwindow = NPP_SetWindow;
pFuncs->newstream = NPP_NewStream;
pFuncs->destroystream = NPP_DestroyStream;
pFuncs->asfile = NPP_StreamAsFile;
pFuncs->writeready = NPP_WriteReady;
pFuncs->write = NPP_Write;
pFuncs->print = NPP_Print;
pFuncs->event = NPP_HandleEvent;
pFuncs->urlnotify = NPP_URLNotify;
pFuncs->getvalue = NPP_GetValue;
pFuncs->setvalue = NPP_SetValue;
pFuncs->javaClass = NULL;
return NPERR_NO_ERROR;
}
NPP_New是浏览器调用创建插件的调用,从这里开始创建插件对象。
相关文章推荐
- yum和apt-get的区别
- nyoj 1087 摆方格
- jquery 排除重复
- C语言-----二维字符串数组内存图解
- Q&A: HOW TO FIX XCODE’S "USED AS THE NAME OF THE PREVIOUS PARAMETER" WARNING
- 一个常用的布局
- 单例模式
- Axure-产品交互设计师的利器
- 一枚Android "短信小偷" 病毒的分析
- 什么是Block
- java构建与管理(1) - Apache Ant Short History
- Linux添加开机启动项
- Spark-streaming 连接flume
- js构建动态对象数组
- 光流法代码解析
- Spark-streaming 连接flume
- Android5.0之Toolbar使用教程
- git rebase -i 重新提交多个commit之前的commit
- Aprior算法简化算法——FP-Tree思想与实现
- 零基础学python-19.2 列表解析与序列映射函数map(2)增加分支测试与嵌套循环