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