`
Poechant
  • 浏览: 229630 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24329
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22104
社区版块
存档分类
最新评论

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

-

分享到:
评论

相关推荐

    flash 透明且可以与C++ 交互

    其次,Flash与C++的交互,这主要涉及到Adobe的Alchemy项目。Alchemy是一个实验性的工具,它允许开发者将C++代码转换为ActionScript字节码,以便在Flash Player环境中运行。这样,开发者可以利用C++的高性能和丰富的...

    c++与flash交互例程,包含as源码

    C++与Flash的交互主要通过Adobe的Alchemy或Flex SDK的Flash Player本地连接(NPAPI或ActiveX插件)实现。Alchemy允许将C/C++代码编译为SWF文件,直接在Flash Player中运行,而Flash Player本地连接则提供了一种在...

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

    这里的 `CLibInit` 类是 AS3 中与 C 代码交互的接口,`echo` 方法就是 C 代码中实现的功能。 通过这种方式,我们能够利用 C/C++ 的高效计算能力,同时保持 Flash AS3 的灵活性和交互性。这对于需要高性能计算的 AIR...

    Alchemy3D——Flash3D引擎

    Alchemy3D是一款强大的Flash3D引擎,它为开发者提供了在Adobe Flash平台上构建高度交互性和视觉效果丰富的3D应用的能力。这款引擎的出现,极大地扩展了Flash的潜力,使其不仅仅局限于2D动画和游戏,而是能够涉足更为...

    flash alchemy api 翻译

    - **1.2.10 AS3_Val AS3_Array(const char* tt,...)** 和 **1.2.11 AS3_Val AS3_Object(const char* tt,...)**: 用于构建ActionScript Array和Object对象,支持多种类型参数,并且需要调用`AS3_Release`释放。...

    Alchemy简单入门教程

    本文旨在为初学者提供 Alchemy 的入门教程,讲述如何使用 Alchemy 将 C/C++ 的代码转换为 AS3 可以调用的格式,从而提高 AS3 的效率。下面是本教程的详细内容: 什么是 Alchemy Alchemy 是 Adobe 开发的一款工具,...

    shineMP3_alchemy

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

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

    综上所述,该基于Alchemy Au1200的多媒体导航系统设计方案充分考虑了性能、功耗和便携性,集成了多媒体播放、GPS导航等多种功能,实现了车载与便携的完美结合,为用户提供高效、便捷的科技体验。

    Flash页游未来新技术:Adobe Alchemy

    - **性能提升**:Adobe Alchemy 能够实现约 80% 的原生 C/C++ 代码执行效率,为 ActionScript 3 (AS3) 开发者提供了获取 C/C++ 代码的强大功能和高效执行能力的机会。 - **全面支持**:Alchemy 支持包括模板、异常、...

    flash/as3 3D 版 SNS社交游戏源码

    AS3可以利用Shader语言(如Alchemy或Stage3D)实现复杂的光照模型,如环境光、点光源、聚光灯等。光照计算涉及颜色混合、向量运算以及对材质属性的理解,如镜面反射、漫反射和环境光吸收。 至于"社交游戏"元素,这...

    BOX2D_As3小项目加中文教程

    首先,Box2D是一个基于C++的物理模拟库,但通过Flash的Alchemy或Zinc工具可以将其转换为ActionScript 3(AS3)可用的形式。它允许开发者创建具有真实物理行为的游戏对象,如重力、碰撞检测、摩擦力和弹力等,极大地...

    AS3 A* 实例,快!

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

    Laravel开发-alchemy-api

    1. **安装依赖**:首先,你需要通过Composer安装一个Laravel包装库,如`kriswallsmith/alchemy-api`,这是一个PHP客户端库,简化了与Alchemy API的交互。在终端中运行以下命令: ``` composer require ...

    行业文档-设计装置-C和C++代码在支持FLASH的WEB平台上运行的方法.zip

    五、C/C++与JavaScript的交互 无论是通过Alchemy还是WebAssembly,C/C++代码在Web上运行时,都需要与JavaScript进行交互,因为JavaScript是Web页面的主要控制语言。这通常通过使用特定的API或库来实现,如Emscripten...

    马尔科夫逻辑网系统alchemy

    3. **学习算法**:Alchemy包含了多种参数学习算法,如在线学习、批量学习和基于采样的方法。这些算法允许用户根据数据调整公式权重,以优化模型的性能。 4. **推理服务**:工具包提供推理引擎,可以进行精确推理或...

    alchemy一键安装版本

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

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

    1. **模型定义**:Alchemy支持用户用Lisp或OWL格式定义马尔可夫逻辑网络,这使得用户能够灵活地表达复杂的知识结构。 2. **学习算法**:Alchemy包含了多种权重学习算法,如Maximum-Marginal Likelihood(MML)、...

    基于AMD Alchemy Au1200嵌入式处理器的媒体播放器设计

    ### 基于AMD Alchemy Au1200嵌入式处理器的媒体播放器设计相关知识点解析 #### 一、便携式媒体播放器(PMP)概念与特点 便携式媒体播放器(Portable Media Player,简称PMP)是一种以播放多媒体文件为核心功能的...

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

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

    全图alchemy安装说明

    Alchemy,源自Adobe的实验项目,旨在将C和C++的源代码编译成可在Adobe Actionscript VM2虚拟机上运行的程序,为开发者提供了利用大量现有C、C++代码资源的可能性。本文将详细介绍在Windows环境下,通过Cygwin进行...

Global site tag (gtag.js) - Google Analytics