0

我之前将整个插件作为一个非常简单的实现工作,其中包含许多全局和静态变量,现在我已经将其转换为基于对象的设计,因此我可以安全地实例化多个实例等。

但是,因为我已经这样做了,所以在创建插件的实例时,它会到达 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 结构也是有效的。所以我对出了什么问题有点难过!

任何帮助将不胜感激,

谢谢。

4

1 回答 1

2

在调试器中检查你的 npnfuncs 指针;我敢打赌它有问题。

除此之外,获取 mozilla 源代码并构建调试版本,以便您可以单步执行代码并准确查看崩溃的位置。这是追踪您所描述的指针问题的最简单方法。

不过,说真的,我赞同 Georg 所说的(尽管我承认有偏见):看看 FireBreath,它可以为您节省大量的故障排除,并且如果您愿意的话,它还可以更容易地移植到 IE。

于 2010-08-03T16:32:32.223 回答