gpt4 book ai didi

c++ - FlasCC:Vector. 和 double[] 之间的互操作

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:14 26 4
gpt4 key购买 nike

假设我是 AS3 和 FlasCC 的新手,并尝试将一些遗留的 C++ 代码移植到 Flash。我有一些数字运算例程,它采用 double 类型的数组。 (数组是固定大小的)。 C++ 原型(prototype)是:

double doNumberCrunching(double input[512]);

现在我想构建一个 SWC,稍后调用 doNumberCrunching()来自 AS3。 SWIG 将 AS3 接口(interface)生成为:

doNumberCrunching(var _input:*):Number;

但是,我不知道如何用 Vector.<Number>(512) 喂它无需处理原始字节。

我的问题是:如何巧妙地解决?你知道访问 double* 的便宜方法吗?基础 Vector.<Number> ?或者更好的东西?

最佳答案

要是你的数字运算函数在整数上运行就好了!然后,您就可以使用 CModule.writeIntVector 将 vector 内容写入 DomainMemory 并传递指向 C++ 代码的指针。

但由于它是 double 的,您将必须遍历 Vector 并使用 CModule.writeDouble 将每个元素从 AS3 数字转换为 C++ double 。然后您可以使用接受 DomainMemory 指针的接口(interface)手动将您的函数公开给 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);
}
}

关于c++ - FlasCC:Vector.<Number> 和 double[] 之间的互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14879502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com