//讀取AS傳入的ByteArray類型數據 static AS3_Val readByteArray(void *self, AS3_Val args) { //提取ByteArray AS3_Val data = AS3_Undefined(); AS3_ArrayValue(args, "AS3ValType", &data); //獲取ByteArray長度 AS3_Val prop = AS3_String("length"); int length = AS3_IntValue(AS3_Get(data, prop)); int i, tmp; char buffer[128]; for (i = 0; i < length; i ++){ //讀取ByteArray裡的值並輸出到終端顯示 tmp = AS3_IntValue(AS3_Get(data, AS3_Int(i))); sprintf(buffer, "[%d] : %d", i, tmp); sztrace(buffer); } return AS3_Null(); }注意一下AS3_Get這個函數,它用于獲取一個AS Object obj的指定屬性prop,屬性用一個AS String字符串來表示,其函數定義為:
AS3_Val AS3_Get(AS3_Val obj, AS3_Val prop)
如果obj不存在指定屬性,則函數返回NULL
然後在AS裡寫如下代碼來調用C函數並傳入ByteArray參數:
//初始化Alchemy var loader:CLibInit = new CLibInit(); var lib:Object = loader.init(); //創建一個ByteArray並寫入點數據 var bytes:ByteArray = new ByteArray(); bytes.writeByte(10); bytes.writeByte(20); bytes.writeByte(255); //調用C函數 lib.readByteArray(bytes);測試結果如下:
[0] : 10
[1] : 20
[2] : 255
PS : 另外在C代碼裡,除了AS3_Get(data, AS3_Int(i))外,還可以用如下方法讀取ByteArray:
unsigned char rs; AS3_ByteArray_seek(data, 0, SEEK_SET); AS3_ByteArray_readBytes(&rs, data, 1); 傳說中這樣比較高效~~AS3_ByteArray_seek
AS3_ByteArray_readBytes
AS3_ByteArray_writeBytes
這三個函數是C用來操作ByteArray的,詳細用法請自行參閱Alchemy API
0 意見