2012-02-13 13 views

答えて

6

ネイティブコードで表現できるオブジェクトをFREObjectとして返すことができます。これには、実際にはActionscriptクラスまたはActionscriptプリミティブデータ型が含まれます。このようなもの含む:INTを、文字列、配列、のBitmapData、ByteArrayの等

例えばintは0の値を持つ長さ4の戻り配列を構築することができます - 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は、ByteArrayのようなIDataOutインターフェイスを実装しているので、あなたはそれから任意の基本的な型を読み込むことができます。 NativeProcessドキュメントも参照してください。

+0

を使用することを検討してください。 –

0

受け入れ答えはあなたの元の質問のために正確ではありません。あなたは構造体を返そうとしています...実際にはできませんが、これを行う適切な方法は、ネイティブ構造体/クラスをactionscriptクラスとして記述し、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

はまた、これが唯一にNativeProcessではなく、ネイティブ拡張のために真である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 
関連する問題