【问题标题】:FlasCC: interop between Vector.<Number> and double[]FlasCC:Vector.<Number> 和 double[] 之间的互操作
【发布时间】:2013-02-14 16:29:44
【问题描述】:

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

double doNumberCrunching(double input[512]);

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

doNumberCrunching(var _input:*):Number;

但是,我不知道如何在不处理原始字节的情况下使用 Vector.&lt;Number&gt;(512) 来提供它。

我的问题是:如何巧妙地解决它?您知道访问double* 底层Vector.&lt;Number&gt; 的廉价方法吗?或者更好的东西?

【问题讨论】:

    标签: c++ actionscript-3 apache-flex adobe flascc


    【解决方案1】:

    如果只有您的数字运算功能在整数上运行!然后您就可以使用 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);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-02
      • 2010-10-24
      • 2011-03-16
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      相关资源
      最近更新 更多