NPNInvoke - передача данных плагина обратно в браузер - PullRequest
3 голосов
/ 30 июня 2011

Я перезваниваю объект в 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 Ответ

2 голосов
/ 30 июня 2011

Насколько я знаю, любой вызов NPN_ * должен выполняться из потока плагинов.Вы можете проверить NPN_PluginThreadAsyncCall.Таким образом, вы можете выполнять методы из другого потока в потоке основного / плагина и избежать неприятного сбоя

...