2012-02-13 96 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