我之前将整个插件作为一个非常简单的实现工作,其中包含许多全局和静态变量,现在我已经将其转换为基于对象的设计,因此我可以安全地实例化多个实例等。
但是,因为我已经这样做了,所以在创建插件的实例时,它会到达 MyScriptableNPObject::NewObject() 方法,它尝试调用 createobject() 但永远不会返回并且浏览器崩溃。
ScriptableNPObject* ScriptableNPObject::NewObject(NPP npp)
{
_DebugLog("ScriptableNPObject::NewObject");
ScriptableNPObject* newObj = (MyScriptableNPObject*)npnfuncs->createobject(npp, &_npclass);
_DebugLog("ScriptableNPObject::NewObject - end");
return newObj;
}
我在那里有一些基本的日志记录作为调试它的快速方法,我可以看到这个方法是按预期从 getValue() 调用的,但最终日志永远不会出现,所以 createobject( )。
我已经为我的 NPObject 定义了自己的 Allocate() 方法,据我所知,NPClass 似乎定义正确,如下所示 -
NPObject* ScriptableNPObject::_Allocate(NPP npp, NPClass *aClass)
{
return (NPObject *)new ScriptableNPObject(npp);
}
NPClass ScriptableNPObject::_npclass = {
NP_CLASS_STRUCT_VERSION,
ScriptableNPObject::_Allocate,
ScriptableNPObject::_Deallocate,
NULL,
ScriptableNPObject::_HasMethod,
ScriptableNPObject::_Invoke,
ScriptableNPObject::_InvokeDefault,
ScriptableNPObject::_HasProperty,
ScriptableNPObject::_GetProperty,
NULL,
NULL,
NULL,
ScriptableNPObject::_Construct,
};
从我所见, npnfuncs 结构也是有效的。所以我对出了什么问题有点难过!
任何帮助将不胜感激,
谢谢。