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

原创 2012年03月26日 10:19:27

基于 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 中的结果如下:

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

-

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

-

版权声明:本文为博主原创文章,未经博主允许不得转载。合作请联系微信 sinosuperman。

相关文章推荐

Adobe FlasCC中 C++端与Flash端的函数参数(如数组和ByteArray)传递

节选自:Using C++ code for path finding in your ActionScript game   如下为C++端接口,as3api.cpp: /* ** ADOBE SY...

AS3与C/C++的交互

AS3与C/C++的交互 ? (以官方网站的文档内容为准) ? 原文见: http://labs.adobe.com/wiki/index.php/Alchemy:Documentation...

AS3与C/C++的交互

AS3与C/C++的交互 ? (以官方网站的文档内容为准) ? 原文见: http://labs.adobe.com/wiki/index.php/Alchemy:Doc...

as3 下使用include,类似,c/c++用法;前面不用#号,demo

原文:http://hi.baidu.com/570851835/item/f045456086c44f35ac3e8304 as3....

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C++和ActionScript3 相互调用

记得自己刚接触As3的时候.我的任务就是做几个Flash界面供C++程序调用,当时用的方法就是ExternalInterface类下面的两个静态方法"call"和"addCallBack折腾来折腾去....

AS中愉快地使用 C/C++

转载请注明出处:http://blog.csdn.net/wl9739/article/details/52607010 注:官网上面的技术文章也在不断地汉化中,只是进度有点慢。在我翻译本篇...
  • tantion
  • tantion
  • 2017年09月15日 15:24
  • 108

AS3与后台交互

 AS3 中使用URLRequest 和URLLoader 与服务器交互AS3 中使用 URLLoader 与 URLRequest 取代了先前版本 LoadVars 方法. 初学者可能又会迷糊了.在...
  • cui55
  • cui55
  • 2008年11月12日 10:15
  • 1278

利用Alchemy加密的破解方法

Alchemy由于是C编译的,其实相当于代码混淆,然后利用混淆的代码去解密。 如 as3加密入门-1使用alchemy进行代码混淆 也就是将原有SWF分为3份: 加载模块。Alchemy解...
  • lqk1985
  • lqk1985
  • 2011年11月21日 10:27
  • 4649

Alchemy安装配置 FLASH AS3炼金术

安装前注意事项: 1) 如果你的机子装的不是flash player 10, 那么请删除它装上10的版本, 这是必须的. 开发者请安装flash cs4 2) 如果你的机子装的不是flex s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于 Alchemy 实现 AS3 与 C++ 交互(1)C++ 回传 Array 给 AS3
举报原因:
原因补充:

(最多只允许输入30个字)