基于 Alchemy 实现 AS3 与 C++ 交互(1)C++ 回传 Array 给 AS3

基于 Alchemy 实现 AS3 与 C++ 交互(1)C++ 回传 Array 给 AS3

  • 作者:柳大·Poechant
  • 邮箱:[email protected]
  • 博客:blog.csnd.net/poechang
  • 日期:March 26th, 2012

0 Alchemy 的使用

请参考 Adobe 官网,这里不赘述。

1 C++ 代码

1.1 接口函数

// AS3 Array 以参数形式传入
AS3_Val test(void *data, AS3_Val args)
{
    // 创建一个数组
    int array_size = 3;
    int array_c[array_size];
    array_c[0] = 1;
    array_c[1] = 2;
    array_c[2] = 3;

    // 从参数获取 AS3 Array
    AS3_Val asArray = NULL;
    AS3_ArrayValue(args, "AS3ValType", &asArray);

    // 得到 Array 的 push 方法
    AS3_Val push_function = AS3_GetS(asArray, "push");

    // 调用上面得到的方法
    for (int i = 0; i < array_size; ++i)
    {
        // 一定要创建 Array 对象,然后把 Array 对象 push 到结果 Array中!!!
        AS3_Val int_to_push = AS3_Array("IntType", array_c[i]);
        AS3_Call(push_function, asArray, int_to_push);
        AS3_Release(int_to_push);
    }
    AS3_Release(push_function);

    return asArray;                                                                                                                                                            
}

1.2 封装、暴露

int main()
{
    AS3_Val testFun = AS3_Function(NULL, test);
    AS3_Val _API = AS3_Object("test:AS3ValType", testFun);
    AS3_Release(testFun);

    AS3_LibInit(_API);

    return 0;
}  

2 用 Alchemy 将 C++ 编译成 SWC

g++ test.cpp -swc -O3 -o test.swc

这个过程较慢。

3 AS3 代码

package 
{   
    import cmodule.a.CLibInit;

    import flash.display.Sprite;

    public class test2 extends Sprite
    {
        private static var lib:Object = null;

        public function test2():void
        {
            var loader:CLibInit = new CLibInit();
            var lib:Object = loader.init();

            var oldArray:Array = new Array();

            // 调用 C++ 函数
            var array:Array = lib.test(oldArray);
            for (var i:int = 0; i < array.length; ++i)
            {
                trace(array[i]);
            }
        }
    }
}

4 运行 AS3 程序

将上面生成的 test.swc 加入到 AS3 工程中,并添加路径。然后运行。我在 Flash Buider 中的结果如下:

1
2
3
[SWF] test2.swf - 解压缩后为 1,574,377 个字节
[卸装 SWF] test2.swf

-

转载请注明来自“柳大·Poechant的CSDN博客”:blog.CSDN.net/Poechant

-

你可能感兴趣的:(基于 Alchemy 实现 AS3 与 C++ 交互(1)C++ 回传 Array 给 AS3)