У меня был весь плагин, который работал ранее как очень простая реализация с большим количеством глобальных и статических переменных, теперь я преобразовал его в объектную конструкцию, чтобы я мог безопасно создавать несколько экземпляров и т. Д.Firefox crash экземпляр NPAPI-плагин
Однако, поскольку я сделал это, при создании экземпляра плагина он дошел до метода MyScriptableNPObject :: NewObject(), где он пытается вызвать createobject(), но никогда не возвращается и браузер выходит из строя.
ScriptableNPObject* ScriptableNPObject::NewObject(NPP npp)
{
_DebugLog("ScriptableNPObject::NewObject");
ScriptableNPObject* newObj = (MyScriptableNPObject*)npnfuncs->createobject(npp, &_npclass);
_DebugLog("ScriptableNPObject::NewObject - end");
return newObj;
}
У меня есть некоторое базовое протоколирование там как быстрый способ отладки это, и я могу видеть, что этот метод вызывается из ПолучитьЗначения(), как и ожидался, но конец бревна никогда не выходит, так что-то очевидно, ошибочно работает в createobject().
я определил свой метод мой Выделяют() для моей NPObject и 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 структура также действует с что я вижу. Так что я немного тупик относительно того, что происходит не так!
Любая помощь будет принята с благодарностью,
Спасибо.
Я сейчас в запуске, но если вы еще не посмотрели [этот учебник] (http://colonelpanic.net/2009/03/building-a-firefox-plugin-part-one/) или [FireBreath] (http://code.google.com/p/firebreath/) - [реализация NPAPI здесь] (http://code.google.com/p/firebreath/source/browse/#hg/src/ NpapiPlugin) - пожалуйста, сделайте это. –