una swf puede propiedad porque para este error depurar definida debug contiene codigos botones archivo animate acceso actionscript-3 air native air-native-extension

actionscript-3 - swf - debug actionscript



Devolver una estructura de una extensión Air Native (4)

¿Es posible devolver una estructura desde tu código nativo? Es relativamente sencillo devolver un int o un booleano, pero ¿cómo se devuelve una estructura más compleja al actionscript?


El valor de retorno del proceso finalizado está limitado a un int . Pero puede escribir datos en stdout y leerlos en su aplicación de AIR:

p = new NativeProcess(); p.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData); private function onOutputData(evt:ProgressEvent):void { var outputData:String = p.standardOutput.readUTFBytes(p.standardOutput.bytesAvailable); trace(outputData); }

StandardOutput implementa la interfaz IDataOut como ByteArray, por lo que puede leer cualquier tipo básico de la misma. Ver también documentos de NativeProcess .


Puede devolver cualquier objeto que pueda representarse en el código nativo como un objeto FREObject. Esto realmente incluye cualquier clase Actionscript o tipo de datos de primitiva Actionscript. Esto incluye cosas como: int, String, Array, BitmapData, ByteArray, etc.

Por ejemplo, construyamos una matriz de retorno de longitud 4 con los valores int 0 - 3:

FREObject returnAnArray( FREContext cts, void* funcData, uint32_t argc, FREObject argv[]) { FREObject returnArray = NULL; FRENewObject((const uint8_t*)"Array", 0, NULL, &returnArray, nil ); FRESetArrayLength( returnArray, 4 ); for ( int32_t i = 0; i < 4; i++) { FREObject element; FRENewObjectFromUint32( i, element ); FRESetArrayElementAt( returnArray, i, element ); } return returnArray; }

El método para construir clases Actionscript es un poco más complejo pero sigue un camino similar. Por supuesto, este es un ejemplo de C nativo, el equivalente de Java es algo diferente, pero aún es posible devolver objetos complejos desde el código nativo.

Para obtener más información, hay montones de documentación aquí:

http://help.adobe.com/en_US/air/extensions/index.html


La respuesta aceptada no es precisa para su pregunta original. Desea devolver una estructura ... bueno, no puede hacerlo, pero la forma correcta de hacerlo es escribir su estructura / clase nativa como una clase actionscript, luego use el objeto ExtensionContext para asociar su estructura nativa o puntero de clase con tu contexto Luego, cuando pueda escribir métodos en su estructura / clase que interactuarán directamente con los métodos y propiedades dentro de. Si alguno de los métodos dentro de devuelve otra estructura o clase, repita el proceso recursivamente.


Ejemplos de Java

Devolución de matriz

FREObject stringElement = FREObject.newObject("String element value"); FREArray array = FREArray.newArray( "String", 1, false ); array.setObjectAt( 0, stringElement ); //now you can return array to AS3

Más información http://help.adobe.com/en_US/air/extensions/WS982b6f491d178e6d6565d9b1132a79a012f-7ff8.html

Considere también usar JSON

JSONObject jsonObject = new JSONObject(); try { jsonObject.put("messgae", "Hello"); jsonObject.put("name", "John"); } catch (JSONException e) { } FREObject jsonString FREObject.newObject(jsonObject.toString()); //now you can return jsonString to AS3