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

来源:互联网 发布:雪之下雪乃手办淘宝 编辑:程序博客网 时间:2024/05/20 23:57

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

  • 作者:柳大·Poechant
  • 邮箱:zhongchao.ustc@gmail.com
  • 博客: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 中的结果如下:

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

-

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

-

原创粉丝点击