2012-12-12 4 views
0

Firebreath를 사용하여 새롭습니다. 연습으로 나는 벡터 추가를하는 플러그인을 작성하려고합니다. 웬일인지 나는 그것에 고심하고있다. 나는 내가하려고하는 것에 관련된 코드를 쓸 것이다.Firebreath NPAPI 플러그인이 자바 스크립트 배열을 참조로 전달합니다.

이것은 내 자바 스크립트 코드입니다. 내 플러그인

void TestJSAPI::addvect(const FB::JSObjectPtr& A, const FB::JSObjectPtr& B, const FB::JSObjectPtr& C, int N){ 

std::cout << "Entering TestJSAPI::addvect " << std::endl; 


int i = 0; 
for(i = 0 ; i < N ; i++){ 
    double val = A->GetProperty(i).cast<double>() + B->GetProperty(i).cast<double>(); 
    C->SetProperty(i,val); 

} 


std::cout << "Exiting TestJSAPI::addvect" << std::endl; 

API.cpp

} 내가 잘못 무슨 일이 일어나고 있는지 알 수없는 것

에서

var problemsize = 512 * 100 
var allocsize = problemsize * 8 

var bufferA = new ArrayBuffer(allocsize); 
var bufferB = new ArrayBuffer(allocsize); 
var bufferC = new ArrayBuffer(allocsize); 
var N = problemsize 

var float32ViewA = new Float32Array(bufferA); 
var float32ViewB = new Float32Array(bufferB); 
var float32ViewC = new Float32Array(bufferC); 

for (var i = 0; i < problemsize; i++) { 
    float32ViewA[i] = 4; 
    float32ViewB[i] = 3; 
    float32ViewC[i] = 0; 
} 

plugin().addvect(float32ViewA.buffer,float32ViewB.buffer,float32ViewC.buffer,problemsize);

그리고 코드입니다. 나는 콘솔에서 파이어 폭스를 시작하고 있습니다. 그냥 들어가기 만하면됩니다 ... 그리고 나오지 않아요. 내가 무엇을 놓치고 있습니까? 감사합니다.

답변

2

우선 .cast를 사용하면 안되며 .convert_cast를 사용해야합니다. .cast를 사용하면 사실상 두 배가 될 수도 있고 그렇지 않을 수도있는 경우에만 작동합니다. NPAPI는 사용중인 입력 된 배열/버퍼에 대해 알지 못한다는 것을 기억하십시오.

내 추측에 따르면 당신은 아무 것도 못 느끼고있는 이유는 FB :: variant :: bad_variant_cast 예외가 발생했다는 것입니다 (올바른 예외 유형이라고 생각합니다; 물론) 캐스팅에 또는 아마도 GetProperty 실패하고 FB :: script_error 던지고있다.