NPAPI 随笔记一、 在chrome运行 npruntime demo

在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);

调用时抛出异常,注释屏蔽!

做了以上处理好调试正常。