`

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

 
阅读更多

基于 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

-

分享到:
评论

相关推荐

    shineMP3_alchemy

    编辑-》首选参数-》actionscript-》actionscript 3.0设置-》库路径-》浏览到swc文件,然后选择那个shineMP3_alchemy.swc 另外,在“发布设置”的flash选项里,也要勾选“发布swc” 不需要通过后台或者fms,直接在...

    Alchemy3D——Flash3D引擎

    Alchemy3D——Flash3D引擎

    基于Alchemy Au1200的多媒体导航系统设计

    本文结合Au1200的内部架构及特点,给出了既可满足车载性能,又能应用于便携产品的多媒体导航系统设计方案,尤其是GPS及电源部分的设计和实现。

    AS3 A* 实例,快!

    在网上无意中发现的 1,使用c实现A*寻路,c的实现里面使用了高效的2叉堆 2,把c代码用alchemy编译成swc 3,在as3中调用swc的接口,返回寻路结果。

    alchemy一键安装版本

    玩炼金技术人有福气了,一键安装就可以直接使用的 alchemy 环境。

    Alchemy教程教你将c转成swc由flash as3调用

    我以一个简单的例子,讲述Alchemy的简单用法 果你想了解Alchemy,建议你读下去,总会有些收获的 Import cmodule.stringecho.CLibInit var test:CLibInit = new cmodule.stringecho.CLibInit; var lib:Object = test....

    alchemy:C++中的神经网络股市预测

    Alchemy 是一个 C++ 应用程序,用于预测公开股票市场中的证券走势。 它包括以下功能: 作为具有反向传播的多层感知器的神经网络实现 用于检索历史数据的雅虎财经数据连接器 使用常用技术分析指标作为 NNet 输入...

    Alchemy Cygwin 最新版 1/2

    [1/2]共包含2个部分,此为第1部分 第2部分下载地址: http://download.csdn.net/source/2474802 包含使用Alchemy所需的: Perl zip gcc / g++ 版本 setup-version: 2.697 如需下载其他内容,下载镜像请选择: ...

    Shine-MP3-Encoder-on-AS3-Alchemy-master.zip

    这是一款MP3编码器,我已经成功的移植到STM32F407单片机上了,非常节省资源,为了降低功耗,我把STM32F407的频率降低到56Mhz,依然可以正常运行, 这个一个在小弄MCU系统中运行可行的MP3软件压缩方法。

    小炼金术-Little-Alchemy 1.1.1

    软件名称:小炼金术:Little Alchemy APK名称:com.sometimeswefly.littlealchemy 最新版本:1.1.1 支持ROM:4.0及更高版本 界面语言:英文软件 软件大小:3.99 M 开发者:Recloak 小炼金术 Little Alchemy是一款...

    pandas-alchemy:基于SQL的,与Pandas兼容的数据框

    pandas-alchemy实现了基于SQL的DataFrame和Series。 与read_sql()不同,整个表不会加载到主内存中。 而是存储一个SQL查询,该查询用于备份DataFrame或Series。 import pandas as pdfrom pandas_alchemy import init...

    Laravel开发-alchemy-api

    Laravel开发-alchemy-api 用于炼金术的Laravel包装。

    马尔可夫逻辑网络工具包alchemy

    马尔可夫逻辑网络工具包alchemy,感兴趣的可以相互交流一下

    Alchemy Eye PRO v11.5.zip

    Alchemy Eye是一个专门设计用来监控从您电脑连线的网络上其它主机状况的软件,网管人员可以藉由这个简单实用的工具随时监控远端的主机是否仍然正常的运作,而不用亲自坐在主机面前操作,这项功能不仅可以有效的取代...

    alchemy1

    alchemy1

    3alchemy:在 TriCity (3city) Ruby 用户组 (http

    3炼金术(FreeAlchemy) 录制在进行的自由式即兴交互式现场暴民编程 Elixir 会议。 3Alchemy代表自由/自由式炼金术。 Alchemy代表使用进行编程。 目标: 学习, 教学, 自由创意。会话日志第 0 节 (2015-04-15) 持续...

    Python库 | alchemy_mock-0.1.0-py2.py3-none-any.whl

    python库。 资源全名:alchemy_mock-0.1.0-py2.py3-none-any.whl

    手机游戏 alchemy380全攻略

    手机游戏 alchemy380全攻略 在原有的360基础上,将新增添的20中已经重点标注粗来了喔~ 相信会有帮助滴~

    es-alchemy:Elasticsearch交互的简化

    简化Elasticsearch交互 安装 npm i --save es-alchemy 设置 概述如何使用 : 定义数据模型 根据数据模型定义索引 为索引生成(版本化)模式,在Elasticsearch中创建它们,并对它们进行别名以进行查询 获取索引的源...

    alchemy-annotations-1.4.zip

    alchemy-annotations.zip,炼金术收藏的一部分。

Global site tag (gtag.js) - Google Analytics