asm
仅用于来回传递数字,这意味着我们必须使用 Alchemy 的内部 int-to-object 映射。挖掘中间的 AS3 代码(要查看它,将ACHACKS_TMPS
环境变量设置为“1”),似乎可以CTypemap.AS3ValType
进行映射。所以你可以像这样返回一个 asm 创建的对象:
static AS3_Val alc_return_obj(void *self, AS3_Val args) {
int len= 100;
// create custom data in AS3
asm("var as3Buffer:Vector.<Number> = new Vector.<Number>(%0, true);" : : "r"(len));
// populate the vector with multiples of pi (just for fun)
for (int idx= 0; idx < len; idx++) {
double value= 3.14159265 * idx;
asm("as3Buffer[%0] = %1;" : : "r"(idx) , "r"(value));
}
// get a C reference to the AS3 object
AS3_Val alcBuffer;
asm("%0 CTypemap.AS3ValType.createC(as3Buffer)[0];" : "=r"(alcBuffer));
return alcBuffer;
}
注意:虽然这很有趣,但它可能不是解决此问题的最佳方法。这可能不是从 Alchemy 中获取数据并进入 Flash 的最快方法。为此,我建议使用 ByteArray 将数据复制进和复制出 Alchemy 的 RAM。有关该领域的一些技术,请参阅此SO question。