Как вернуть байтовый массив из алхимии C - PullRequest
0 голосов
/ 03 февраля 2011

Я написал код алхимии для чтения массива байтов, который я передал из flex.

Когда я печатаю значение, я получаю ошибку

не может преобразовать OggS во флэш.utils.ByteArray

Код алхимии

static AS3_Val readFile(void* self, AS3_Val args)
{

    unsigned int e_length;  
    AS3_Val e_data = AS3_Undefined();   
    AS3_ArrayValue( args, "IntType, AS3ValType", &e_length, &e_data );  
    //unsigned char * data = (unsigned char *)malloc(sizeof(unsigned char)  * (e_length +  1));
    char *buffer;
    buffer = (char *)malloc(e_length+ 3);
    AS3_ByteArray_seek(e_data, 0, SEEK_SET);
    AS3_ByteArray_readBytes(buffer, e_data, e_length);
    free(buffer);
    return AS3_String(buffer);

}

Код Flex:

private function copyByteArray(content:String):void{

    try{

    byteData = new ByteArray();
        //byteData.writeUTFBytes(contents);
        var dec:Base64Decoder = new Base64Decoder();
        dec.decode(content);
        byteData = dec.toByteArray();
        Alert.show("byte Array   " + byteData.length +" ::  " +contents.length);

        var file:File = File.desktopDirectory.resolvePath("Files/test.spx");
        stream = new FileStream();
        stream.open(file, FileMode.WRITE);

    var byteArr:ByteArray;
        var loader:CLibInit = new CLibInit();
        var lib:Object = loader.init();

        var byteStr:String;

    byteArr = lib.readFile( byteData.length, byteData);

    stream.writeBytes(byteArr);
        stream.close();

    }
    catch (ex: ErrorEvent){
        Alert.show("error");

    }
}

1 Ответ

1 голос
/ 23 марта 2011

Ваша проблема в том, что ваш код Alchemy возвращает String, но ваш код Flex пытается присвоить его ByteArray.Вот AS3-эквивалент того, что вы делаете:

var ba:ByteArray= new String();     // bad

Если вы хотите вернуть ByteArray из Alchemy, вам необходимо создать его и заполнить данными.это, вероятно, неэффективно.Смотрите ТАК * вопрос (и ссылки, на которые указывают ответы) о том, как передавать данные напрямую через ОЗУ Алхимии.

...