以前はプラグイン全体が、多くのグローバル変数と静的変数を使用した非常に単純な実装として機能していましたが、現在はオブジェクト ベースの設計に変換しているため、複数のインスタンスを安全にインスタンス化できます。
ただし、プラグインのインスタンスを作成すると、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 構造体も有効です。だから私は何がうまくいかないのか少し困惑しています!
どんな助けでも大歓迎です、
ありがとう。