2012-12-12 71 views
0

我是使用Firebreath的新手。作爲一個練習,我正在嘗試編寫一個插件來完成矢量添加。出於某種原因,我正在爲此而掙扎。我會對我正在嘗試做的事情做相關的代碼。Firebreath NPAPI插件通過javascript數組傳遞

這是我的Javascript代碼。

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);

和代碼在我的插件API.cpp

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; 

}

我似乎無法弄清楚什麼錯。我從控制檯啓動Firefox,它只是打印輸入...和不退出..我在這裏錯過了什麼?謝謝

回答

2

首先你不應該使用.cast,你應該使用.convert_cast。如果你使用.cast,它只會在它實際上是一個可能或不可能是雙倍的情況下才起作用。請記住,NPAPI不​​知道您正在使用的類型化數組/緩衝區。我的猜測是,你沒有得到任何地方的原因是有一個FB :: variant :: bad_variant_cast異常被拋出(我認爲是正確的異常類型;看在variant.h是肯定)在演員或可能你的GetProperty失敗並拋出FB :: script_error。