2012-12-30 4 views
0

SpiderMonkey JS Engine 1.8.5 API를 사용하고 있습니다. 내가 의도적으로 질문을 더 명확하게하는 코드를 단순화SpiderMonkey JS Enginge의 콜백 함수를 호출합니다.

JSBool visit_children(JSContext* cx, uintN argc, jsval *vp) { 

    JSFunction* function; 
    if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "f", &function)) 
     return JS_FALSE; 

    jsval retVal; 
    JS_CallFunction(cx, JS_GetGlobalObject(cx), function, 0, NULL, &retVal); 

    return JS_TRUE; 
} 

:

visitChildren(function() { 
          log("something"); 
         }); 

VisitChildren이 같은 것이있다 : 같은

JS 코드가 보인다. 확실히 뭔가 잘못하고있어, 누군가가 * JS_CallFunction * 응용 프로그램을 호출하는 이유를 제안 할 수 있습니까?

UPD1 :

여기 https://developer.mozilla.org/en-US/docs/SpiderMonkey/JSAPI_Reference/JSFunction 일부 모호한 정보를 찾을 수 있지만, 여전히 충돌 : 당신이 원하는 것은 대신 JS_CallFunctionValue[1]입니다

jsval functionVal = OBJECT_TO_JSVAL(JS_GetFunctionObject(function)); 
JS_CallFunctionValue(cx, JS_GetGlobalObject(cx), functionVal, 0, NULL, &retVal); 
+0

나는 C++을 많이 모른다. 그러나 jsval을 nullptr로 설정하면 어떻게 될까? – fflorent

+0

그렇지 않으면 다음을 참조하십시오. http://dxr.mozilla.org/search.cgi?tree=mozilla-central&request_time=1356890964124&string=JS_CallFunction – fflorent

답변

1

. 유형 (JS_ConvertArguments 호출)을 테스트 한 후 결과로 나타나는 JSFunction을 무시하고 대신 실제 jsval을 사용하십시오. 아직 JSFunction에 대한 사용을 찾지 못했습니다.

+1

감사합니다! JS_CallFunctionValue (cx, JS_GetGlobalObject (cx), * (JS_ARGV (cx, vp)), 0, NULL 및 retVal); 매력처럼 작동합니다! –

관련 문제