2013-08-18 7 views
1

현재 페이지의 DOM에 액세스 할 수있는 NPAPI 플러그인을 작성했습니다. 나는 플러그인을 만들 수있다. 지금 javascript 함수를 호출하려면 console.debug ("hello from C++"); NPAPI 플러그인에서 가져 왔습니다. 나는 코드 내가 NPAPI 플러그인을 구축하기 위해 구글에서 helloworld를 샘플 코드를 사용하고 다음 촬영 한 : 코드 :NPAPI 플러그인에서 javascript 함수 호출

bool ScriptablePluginObject::Invoke(NPObject* obj, NPIdentifier methodName, const NPVariant* args,uint32_t argCount, NPVariant* result) 
{ 
    // The message i want to send. 
    char* message = "Hello from C++"; 

    // Get window object. 
    NPObject* window = NULL; 
    NPN_GetValue(npp_, NPNVWindowNPObject, &window); 

    // Get console object. 
    NPVariant consoleVar; 
    NPIdentifier id = NPN_GetStringIdentifier("console"); 
    NPN_GetProperty(npp_, window, id, &consoleVar); 
    NPObject* console = NPVARIANT_TO_OBJECT(consoleVar); 

    // Get the debug object. 
    id = NPN_GetStringIdentifier("debug"); 

    // Invoke the call with the message! 
    NPVariant type; 
    STRINGZ_TO_NPVARIANT(message, type); 
    NPVariant args[] = { type }; 
    NPVariant voidResponse; 
    NPN_Invoke(npp_, console, id, args,sizeof(args)/sizeof(args[0]),&voidResponse); 

    // Cleanup all allocated objects, otherwise, reference count and 
    // memory leaks will happen. 
    NPN_ReleaseObject(window); 
    NPN_ReleaseVariantValue(&consoleVar); 
    NPN_ReleaseVariantValue(&voidResponse); 
} 

하지만 추락지고 test.html를 내가 부르고 로딩 후. "올바른 위치에서이 코드를 호출하고 있습니다"및 "이 코드를 테스트 할 수있는 방법"을 알려주십시오.

덕분에 ...

답변

0

덕분에

귀하의 제안이 도움이 ... taxilian. chrome.exe를 디버깅하고 npnfuncs 구조와 관련된 문제를 확인했습니다. 빈 구조가 문제의 원인이었습니다. 따라서이 문제를 해결하는 데 도움이되는 코드 변경은 거의 없습니다. \ 프로그램 파일 \ 구글 \ 크롬 \ 응용 프로그램> chrome.exe의 --plugin - 시작 - 대화 --wait를 위해 디버거

: 크롬은

C (시도 싶어 수도 다른 사람을 위해)를 사용하여 디버깅 할 수 있습니다

2

우선 처음이다 : 나는 읽을 때마다 나는 조금 마른 세수 할 필요가 더 이상 정보 "가 추락". 그게 전부라면, 당신은 너무 빨리 문제 해결을 중단했다. FireBreath project에는 도움이 될 page on debugging plugins이 있지만 디버거가 연결되어있는 동안 충돌이 발생하면 충돌이 발생한 위치와 충돌 원인을 찾아야합니다.

프로덕션 환경에서 수행중인 작업을 수행 할 때 상당한 성능상의 문제점이 있음을 알려드립니다. 이것을 기본 로깅 방법으로 사용하지 마십시오! 그것은 충분히 빠르지 않습니다.

그건 그렇고, 나는 본질적으로 대부분 당신의 접근법에 문제가있는 것을 보지 못했습니다. 귀하의 (아마도 전 세계적인) npp_이 유효하지 않거나 문자열이 NPN_MemAlloc에 ​​의해 할당 된 메모리로 구성되어야 할 수도 있습니다. 나는 당신이 그것을 돌려 주었다면 그것은 필요 하겠지만, 당신이 새로운 기능을 호출 할 때 필요하다고 생각하지 않는다. 그것은 시도할만한 것입니다.

내가 너라면, 다음 단계는 디버거를 연결하고 충돌이 어디 있는지 확인하는 것입니다. 가장 쉬운 방법은 파이어 폭스에서 플러그인 ipc를 꺼서 프로세스에 쉽게 첨부 할 수 있지만 올바른 프로세스를 찾고 연결하는 것입니다 (자세한 내용은 앞서 링크 된 디버깅 페이지 참조)