我使用NPAPI在Javascript中回调一个对象。在此调用之前,我调用的函数会导致在JavaScript中正确调用函数,但在NPN_Invoke
调用中失败。
代码段:
sBrowserFuncs->releaseobject(object_temp);
object_temp = NPVARIANT_TO_OBJECT(args[0]);
sBrowserFuncs->retainobject(object_temp);
if (send_msg1(sBrowserFuncs, instance, msg_rcv, NPVARIANT_TO_OBJECT(args[0]), msg, name_id))
sendmsg1
产生一个新线程,这个线程回调msg_rcv
。产生的线程是否可以调用主线程函数,这是错误的原因。
...
她对NPN_Invoke
的呼召叫做
NPVariant from;
STRINGZ_TO_NPVARIANT(sdata->from, from);
NPIdentifier methodId = NPN_GetStringIdentifier("new_msg");
int res = NPN_Invoke(sdata->instance, object_temp, methodId, &from, 1, &result);
sdata->instance
与instance
匹配
object_temp
最后称为对象存储
它返回0,而在成功的情况下它返回1.
在这种情况下NPN_Invoke
生成0,
答案 0 :(得分:2)
据我所知,任何NPN_ *调用都应该从插件线程发出。您可以查看NPN_PluginThreadAsyncCall
。我通过这种方式你可以在主/插件线程上从另一个线程执行方法,避免一个令人讨厌的崩溃:)