asm
数値をやり取りするためだけのものです。つまり、Alchemyの内部のintからオブジェクトへのマッピングを使用する必要があります。中間の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にデータをコピーしたり、RAMからデータをコピーしたりすることをお勧めします。その分野のいくつかのテクニックについては、このSOの質問を参照してください。