可以將Sprite模擬成Command Shell,本範例測試Alchemy是否能使用C語言常用
的輸出入函數將資料導到STDIN、STDOUT、 STDERR
以下程式改自Alchemy samples其中的stringecho範例
這是C程式
#include <stdlib.h>
#include <stdio.h>
#include "AS3.h"
static AS3_Val echo(void* self, AS3_Val args)
{
char* val = NULL;
AS3_ArrayValue( args, "StrType", &val );
if(val == NULL)
{
char* nullString = "null";
//return the string "null"
return AS3_String(nullString);
}
printf("*****Test printf() OK!!!*****\n");
fprintf(stderr, "*****%s Test fprintf(stderr,...) OK!!!*****\n",val);
fprintf(stdout, "*****%s Test fprintf(stdout,...) OK!!!*****\n",val);
return AS3_String(val);
}
int main()
{
AS3_Val echoMethod = AS3_Function( NULL, echo );
AS3_Val result = AS3_Object( "echo: AS3ValType", echoMethod );
AS3_Release( echoMethod );
AS3_LibInit( result );
return 0;
}
這是as3程式
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.Event;
import flash.events.MouseEvent;
import cmodule.stringecho.CLibInit;
public class EchoTest extends Sprite
{
protected var alchemyLib : Object;
public function EchoTest()
{
addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );
}
protected function addedToStageHandler( event : Event ) : void
{
removeEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );
var loader:CLibInit = new CLibInit;
loader.setSprite(this);
alchemyLib= loader.init();
trace(alchemyLib.echo("foo0"));
alchemyLib.echo("foo1");
throw Error(alchemyLib.echo("foo2"));
}
}
}
執行的結果如下
*****foo1 Test fprintf(stderr,...) OK!!!*****
*****foo2 Test fprintf(stderr,...) OK!!!*****
經過用力的測測測........
目前只有fprintf(stderr,...)能成功輸出
Alchemy名字取的真好
可真是"煉金術"啊
讓我可以體會自古以來西方鍊金術士鍊金過程的辛苦
發思古之幽情........
這是swf檔
[Demo]