Apache flex Adobe Alchemy字节数组读取问题
我试图将从文件中提取的字节数组发送到C代码,并再次从C代码返回该字节数组 我正在文本视图contents.text中打印C返回值的内容,但我能看到的只是字节数组对象OggS。我看不到字节数组的内容。谁能说我哪里出了问题?。。我已经发布了C代码和AS代码Apache flex Adobe Alchemy字节数组读取问题,apache-flex,actionscript-3,alchemy,Apache Flex,Actionscript 3,Alchemy,我试图将从文件中提取的字节数组发送到C代码,并再次从C代码返回该字节数组 我正在文本视图contents.text中打印C返回值的内容,但我能看到的只是字节数组对象OggS。我看不到字节数组的内容。谁能说我哪里出了问题?。。我已经发布了C代码和AS代码 AS Code: private function copyByteArray(content:String):void{ try{ byteData = new ByteArray(); /
AS Code:
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 +" :: " +contents.length);
var file:File = File.desktopDirectory.resolvePath("Files/test.spx");
stream = new FileStream();
stream.open(file, FileMode.WRITE);
/* var loader:CLibInit = new CLibInit();
var lib:Object = loader.init();
loader.supplyFile("testFile.txt", byteData);
contents.text = lib.sqre(5);*/
var loader:CLibInit = new CLibInit();
var lib:Object = loader.init();
// var result:String = lib.doMagic(byteData);
var byteArr:ByteArray;
var byteStr:String;
//byteArr.writeBytes(byteData, 0 , byteData.length);
loader.supplyFile("test1.txt" , byteData);
byteStr = lib.readFile("test1.txt");
contents.text = byteStr;
//stream.writeBytes();
stream.close();
}
catch (ex: ErrorEvent){
Alert.show("error");
}
}
C代码:
static AS3_Val readFile(void* self, AS3_Val args)
{
char * fileName;
FILE * file;
long fileSize;
char * buffer;
AS3_ArrayValue(args, "StrType", &fileName);
file = fopen(fileName,"rb");
//Get file size
fseek (file, 0, SEEK_END);
fileSize = ftell(file);
rewind(file);
//Allocate buffer
buffer = (char*) malloc(sizeof(char)*fileSize);
//Read file into buffer
fread(buffer, 1, fileSize, file);
//close file and free allocated buffer
fclose (file);
free (buffer);
return AS3_String((char*)buffer);
}
static AS3_Val readFile( void *self, AS3_Val args ) {
AS3_Val inData_arg = AS3_Undefined();
AS3_Val outData_arg = AS3_Undefined();
AS3_ArrayValue( args, "AS3ValType, AS3ValType", &inData_arg, &outData_arg );
AS3_Val inDataLength = AS3_GetS( inData_arg, "length" );
-- do something with input data, fill output data array
// try to stop it leaking
// AS3_ReleaseX( wavData_arg ); AS3_ReleaseX( dstData_arg ); AS3_ReleaseX( logFile_arg );
// AS3_ReleaseX( args );
return AS3_Null;
}
我也有点被困在这个问题上了。我想到的最好的方法是将所有需要的ByteArray传递到c函数中。在我的例子中,我传递一个输入数据字节数组,并传入另一个空byteArray,以便c函数将输出数据放入其中。然后,c函数不需要创建byteArray,我无法让它工作,c函数也不需要返回值 作为代码:
public function actionscriptFunction() {
var myInputData:ByteArray = new ByteArray();
-- maybe load a file or something into myInputData
var myOutputData:ByteArray = new ByteArray();
var loader:CLibInit = new CLibInit();
var lib:Object = loader.init();
lib.readFile( myInputData, myOutputData );
-- do something with the output data
}
C代码:
static AS3_Val readFile(void* self, AS3_Val args)
{
char * fileName;
FILE * file;
long fileSize;
char * buffer;
AS3_ArrayValue(args, "StrType", &fileName);
file = fopen(fileName,"rb");
//Get file size
fseek (file, 0, SEEK_END);
fileSize = ftell(file);
rewind(file);
//Allocate buffer
buffer = (char*) malloc(sizeof(char)*fileSize);
//Read file into buffer
fread(buffer, 1, fileSize, file);
//close file and free allocated buffer
fclose (file);
free (buffer);
return AS3_String((char*)buffer);
}
static AS3_Val readFile( void *self, AS3_Val args ) {
AS3_Val inData_arg = AS3_Undefined();
AS3_Val outData_arg = AS3_Undefined();
AS3_ArrayValue( args, "AS3ValType, AS3ValType", &inData_arg, &outData_arg );
AS3_Val inDataLength = AS3_GetS( inData_arg, "length" );
-- do something with input data, fill output data array
// try to stop it leaking
// AS3_ReleaseX( wavData_arg ); AS3_ReleaseX( dstData_arg ); AS3_ReleaseX( logFile_arg );
// AS3_ReleaseX( args );
return AS3_Null;
}
然而,无论我怎么做,这都会泄露秘密,所以我认为一定有更好的办法
**更新
我发现,如果我多次创建一个新的CLibInit,它只会泄漏bytearray。也就是说,如果使用一个静态实例,并且只在一切正常后初始化它
例如