2012-02-13 95 views

回答

6

您可以返回任何可以在本机代码中表示为FREObject的对象。这实际上包括任何Actionscript类或Actionscript原始数据类型。这包括喜欢的东西:整数,字符串,数组,的BitmapData整型,字节阵列等

例如允许构造长度为4的返回阵列中的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; 
} 

构建ActionScript中的方法类稍微复杂一些,但遵循相似的路径。这当然是一个本地C例子,Java等价物有些不同,但仍然可以从本地代码中返回复杂的对象。

更多信息有此文件的堆:

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

-1

完成过程的返回值限制为int。但是,你可以将数据写入到stdout,并在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实现IDataOut接口ByteArray等,这样你就可以从中读取任何基本类型。另请参阅NativeProcess文档。

+0

这仅适用的NativeProcess,不是原生扩展是真的。 – 2012-04-30 22:17:26

0

接受的答案是不准确的为你原来的问题。你想要返回一个结构...以及你不能这样做,但正确的方法是将你的本地结构/类编写为一个动作类,然后使用ExtensionContext对象来关联你的本地结构或类指针与你的上下文。然后,当你可以写入方法到你的结构/类,将直接与内部的方法和属性接口。如果任何方法返回另一个结构或类,则递归地重复该过程。

0

Java示例

返回数组

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 

更多信息 http://help.adobe.com/en_US/air/extensions/WS982b6f491d178e6d6565d9b1132a79a012f-7ff8.html

还要考虑使用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