あなたの数値処理関数だけが int で動作していれば! 次に、CModule.writeIntVector を使用してベクトルの内容をDomainMemoryに書き込み、ポインタを C++ コードに渡すだけです。
ただし、これは double であるため、Vector を反復処理し、各要素をCModule.writeDoubleを使用して AS3 Number から C++ double に変換する必要があります。次に、DomainMemory ポインターを受け入れるインターフェイスを使用して、関数を AS3 に手動で公開できます。
void doNumberCrunchingAS() __attribute__((used,
annotate("as3sig:public function doNumberCrunching(inputPtr:int):Number"),
annotate("as3package:mypackage"))
));
double doNumberCrunching( double* input )
{
// Actual implementation here
return 0;
}
void doNumberCrunchingAS()
{
// Read the AS3 argument and convert it to a convenient C++ form.
int memoryOffset = 0;
AS3_GetScalarFromVar(memoryOffset, inputPtr);
double* inputPtr = reinterpret_cast<double*>( memoryOffset );
// Call an implementation routine.
double result = doNumberCrunching( inputPtr );
// Return result to AS3 code.
AS3_Return( result );
}
AS3 コード:
package
{
using mypackage.doNumberCrunching;
function testNumberCrunching():void
{
var ptr:int = CModule.malloc(blobSize);
// a loop of writeDouble should be here
doNumberCrunching(ptr);
CModule.free(ptr);
}
}