NPNInvoke - передача данных плагина обратно в браузер
Я перезваниваю объект в Javascript, используя NPAPI. Перед этим вызовом вызываемые мной функции приводят к правильному вызову функций в 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,
1 ответ
Насколько я знаю, любой вызов NPN_* должен выполняться из потока плагинов. Ты можешь проверить NPN_PluginThreadAsyncCall
, Таким образом, вы можете выполнять методы из другого потока, из основного потока / потока плагина и избежать неприятного сбоя:)