0

Firebreathの使用は初めてです。演習として、ベクトル加算を行うプラグインを作成しようとしています。どういうわけか私はそれに苦労しています。私がやろうとしていることのコードを関連させます。

これは私の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 を起動していますが、 Entering... and Not Exiting.. と表示されるだけです。ありがとう

4

1 に答える 1

2

まず、.castを使用するべきではなく、.convert_castを使用する必要があります。.castを使用する場合は、実際にdoubleである場合にのみ機能しますが、そうでない場合もあります。NPAPIは、使用している型付き配列/バッファーについて何も知らないことに注意してください。

私の推測では、どこにも到達しない理由は、FB :: Variant :: bad_variant_cast例外がスローされているためです(これは正しい例外タイプだと思います。必ずvariant.hを調べてください)。キャストするか、GetPropertyが失敗して、FB::script_errorをスローしている可能性があります。

于 2012-12-12T21:22:58.260 に答える