在chrome运行 npruntime demo,codeproject上的demo 是用于firefox上的,在chrome上使用得修改部分代码。
必要库:windows platform sdk 和 NPAPI SDK
在codeproject下载 npruntime的demo。
编译时
缺少头文件npfunctions.h于是找了NPAPI SDK.
未包含 windows.h于是include一下
NP_GetMIMEDescription 方法定义与SDK有冲突
char * NP_GetMIMEDescription() { return NPP_GetMIMEDescription(); }
修改为
const char * NP_GetMIMEDescription() { return NPP_GetMIMEDescription(); }
编译成功,后调试时,发现,插件加载失败。
经过多方查找资料,修改了以下部分代码终于成功了。
修改代码
NP_GetEntryPoints方法里面的
if(pFuncs->size < sizeof(NPPluginFuncs)) return NPERR_INVALID_FUNCTABLE_ERROR;
追踪发现Chrome 浏览器传递过来的pFuncs->size为80和实际定义的NPPluginFuncs的大小为84 所以严重不通过。注释屏蔽!
NP_Initialize方法里面的
if(pFuncs->size < sizeof(NPNetscapeFuncs)) return NPERR_INVALID_FUNCTABLE_ERROR;
追踪发现Chrome 浏览器传递过来的pFuncs->size和实际定义的NPNetscapeFuncs的大小不等所以严重不通过。注释屏蔽!
CPlugin构造函数内
NPN_InvokeDefault(m_pNPInstance, NPVARIANT_TO_OBJECT(barval), &arg, 1, &rval);
调用时抛出异常,注释屏蔽!
做了以上处理好调试正常。