基於 Alchemy 實現 AS3 與 C++ 互動(1)C++ 回傳 Array 給 AS3

鍾超發表於2012-03-26

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

-

相關文章