Раньше весь плагин работал как очень простая реализация со множеством глобальных и статических переменных, теперь я преобразовал его в объектно-ориентированный дизайн, чтобы я мог безопасно создавать экземпляры нескольких экземпляров и т. Д.
Однако, поскольку я это сделал, при создании экземпляра плагина он достигает метода 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 ().
Я определил свой собственный метод Allocate () для моего 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 также действительна из того, что я вижу. Так что я немного озадачен тем, что происходит не так!
Любая помощь будет принята с благодарностью,
Спасибо.