проблема обратного вызова из C ++ в JS - PullRequest
0 голосов
/ 27 сентября 2011

Я новичок в NPAPI.Я сталкиваюсь с одной проблемой.в моем плагине мне нужно вернуть некоторые данные из C ++ в JavaScript, да, это обратный вызов.но поток обратного вызова и основной поток являются отдельными потоками.Поэтому я использую NPN_PluginThreadAsyncCall, но проблема не может быть решена также.При обратном вызове произошел сбой Firefox ... Кто-нибудь может мне помочь?

ниже приведены коды в теме обратного вызова. Кто-нибудь может сказать мне, почему произошел сбой?

npnfuncs->pluginthreadasynccall(instance,callBackfunc,(void*)pdata);
/////////////////////////////////////////////////////////////////////
void callBackfunc(void* arg)
{
    NPObject *winobj;
    npnfuncs->getvalue(instance,NPNVWindowNPObject,&winobj);

    NPVariant handler;
    NPIdentifier id1 = npnfuncs->getstringidentifier("MyTest".c_str());
    npnfuncs->getproperty(instance, winobj, id1, &handler);
    NPObject* handlerObj= NPVARIANT_TO_OBJECT(handler);

    NPVariant prototype;
    NPIdentifier id2 = npnfuncs->getstringidentifier("prototype");
    npnfuncs->getproperty(instance, serviceHandlerObj, id2, &prototype);
    NPObject* prototypeObj= NPVARIANT_TO_OBJECT(prototype);

    NPIdentifier id = npnfuncs->getstringidentifier("fun".c_str());

    NPVariant voidResponse;
    int status=npnfuncs->invoke(instance,prototypeObj,id,args,argCount,&voidResponse);
    return;
}    

благодаря С наилучшими пожеланиямиgreatsea

1 Ответ

0 голосов
/ 28 сентября 2011

... Что такое "MyTest" .c_str () должен быть?Это C ++, нет?c_str () - это метод класса std :: string, и я не вижу здесь такого обвинения, поэтому попытка сделать .c_str () для него не должна даже компилироваться, если только здесь не происходит что-то, чтоЯ действительно не понимаю.

Также имейте в виду, что по крайней мере Safari 5.1 прекратил поддержку NPN_PluginThreadAsyncCall, и для создания обратных вызовов между потоками необходимо использовать разные методы.Я не знаю, есть или нет другие браузеры;пока что это не так.

Есть ли причина, по которой вы не просто используете FireBreath для своего плагина?Он решает все эти проблемы для вас и позволяет вам просто сосредоточиться на вашем плагине ...

...