如果只有您的数字运算功能在整数上运行!然后,您将能够使用CModule.writeIntVector将向量内容写入 DomainMemory 并传递指向 C++ 代码的指针。
但由于它是双精度数,您将不得不遍历 Vector 并使用CModule.writeDouble将每个元素从 AS3 Number 转换为 C++ 双精度数。然后,您可以使用接受 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);
}
}