2011-09-27 2 views
0

나는 NPAPI의 최신 버전입니다. 나는 한 가지 문제에 직면한다. 내 플러그인에 , 일부 데이터를 C++에서 JavaScript로 반환해야합니다. 예, 콜백입니다. 하지만 콜백 스레드와 주 스레드는 별도의 스레드입니다. 그래서 NPN_PluginThreadAsyncCall을 사용하지만 문제는 해결할 수 없습니다. 콜백 할 때, 파이어 폭스가 추락했습니다 ... 아무도 도와 줄 수 있습니까?C++에서 JS 로의 콜백 문제

벨로우즈 코드가 콜백 스레드에 있습니다. 아무에게도 왜 추락했는지 말해 줄 수 있습니까?

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

답변

0

... 있어야 "MYTEST".c_str() 무엇입니까? 이것은 C++입니다. c_str()은 std :: string 클래스의 메서드이며 여기서는 고소당하는 것을 보지 않습니다. 따라서 여기에 .c_str()을 수행하려고하면 컴파일되지 않아야합니다. 나는 정말로 이해하지 못한다.

Safari 5.1 이상에서 NPN_PluginThreadAsyncCall 지원이 중단되었으며 크로스 스레드 콜백을 만들기 위해 여러 가지 방법을 사용해야한다는 점에 유의하십시오. 나는 다른 브라우저가 가지고 있는지 또는 가지지 않을지 모른다. 지금까지 그렇게 보이지 않습니다.

플러그인에 FireBreath을 사용하는 이유가 있습니까? 그것은 당신을 위해 이러한 모든 문제를 해결하고 단지 당신의 플러그인에 집중할 수 있습니다 ...