FREObject 型

FREObject 型の変数は、ActionScript クラスオブジェクトまたはプリミティブ型に対応するオブジェクトを表します。ネイティブ実装で FREObject 変数を使用して ActionScript データを操作します。FREObject 型は主に、ネイティブ関数のパラメーターおよび戻り値で使用します。

ネイティブ関数を記述する際には、ユーザーがパラメーターの順序を決定します。また、ユーザーが ActionScript 側も記述するので、ExtensionContext インスタンスの call() メソッドで、そのパラメーター順序を使用します。そのため、すべてのネイティブ関数のパラメーターは FREObject 変数ですが、対応する ActionScript 型を把握できます。

同様に、ネイティブ関数の戻り値がある場合は、ユーザーがその戻り値の ActionScript 型を決定します。 call() メソッドはこの型のオブジェクトを返します。ネイティブ関数の戻り値は常に FREObject 変数ですが、対応する ActionScript 型を把握できます。

拡張 C API では、FREObject 変数によって参照されるオブジェクトを使用するための関数が提供されます。これらのオブジェクトは ActionScript データに対応するので、これらの C API 関数を使用して ActionScript クラスオブジェクトまたはプリミティブデータ変数にアクセスできます。使用する C API は ActionScript オブジェクトの型によって異なります。この型は次のとおりです。

  • ActionScript プリミティブデータ型

  • ActionScript クラスオブジェクト

  • ActionScript String オブジェクト

  • ActionScript Array または Vector クラスオブジェクト

  • ActionScript ByteArray クラスオブジェクト

  • ActionScript BitmapData クラスオブジェクト

注意: FREFunction 関数が実行されているスレッドと同じスレッドからのみ、拡張 C API を呼び出すことができます。この唯一の例外となるのは、C API が ActionScript 側にイベントを送出する場合です。その関数 FREDispatchStatusEventAsync() は、どのスレッドからも呼び出すことができます。

FREObject 変数の型の判断

FREObject 変数が対応する ActionScript Object の型がわからない場合もあります。型を判断するには、C API 関数 FREGetObjectType() を使用します。

FREResult FREGetObjectType( FREObject object, FREObjectType *objectType );

型が判明したら、適切な C API を使用して、その値を操作します。例えば、型が FRE_TYPE_VECTOR の場合、 ActionScript Array および Vector オブジェクトの操作 の説明にある C API を使用して Vector オブジェクトを操作します。

FREObject の有効性

C API 呼び出しで無効な FREObject 変数の使用を試みると、C API は FRE_INVALID_OBJECT 戻り値を返します。

FREObject 変数は、コールスタック上の最初の FREFunction 関数が戻るまでの間のみ有効です。コールスタック関数上の最初の FREFunction 関数は、ActionScript 側で ExtensionContext インスタンスの call() メソッドを呼び出した結果、ランタイムが呼び出す関数です。

次の図に、この動作を示します。

フルサイズのグラフィックを表示
コールスタック上での FREObject の有効性

注意: FREFunction 関数は間接的に他の FREFunction 関数を呼び出すことができます。例えば、 FREFunctionA() は ActionScript オブジェクトのメソッドを呼び出すことができます。そのメソッドは次に FREFunctionB() を呼び出すことができます。

そのため、FREObject 変数を使用する場合は、次のことを考慮します。

  • FREFunction 関数に渡された FREObject 変数は、コールスタック上の最初の FREFunction 関数が戻るまでの間のみ有効です。

  • ネイティブ関数が拡張 C API を使用して作成する FREObject 変数は、コールスタック上の最初の FREFunction 関数が戻るまでの間のみ有効です。

  • 他のスレッドでは FREObject 変数を使用できません。FREObject 変数は、変数を受け取った、または作成したネイティブ関数のスレッドと同じスレッド内でのみ使用してください。

  • 複数の FREFunction 関数呼び出しをまたがって(例えばグローバルデータ内で)FREObject 変数を保存することはできません。コールスタック上の最初の FREFunction 関数が戻ると変数は無効となるので、保存された変数は使用できません。ただし、 FRESetContextActionScriptData() メソッドを使用して、対応する ActionScript オブジェクトを保存することができます。

  • FREObject 変数が無効になった後でも、対応する ActionScript オブジェクトは存続できます。例えば、FREObject 変数が FREFunction 関数の戻り値の場合、対応する ActionScript オブジェクトは参照されたままです。ただし、ActionScript 側でその参照が削除された場合は、ランタイムによって ActionScript オブジェクトが破棄されます。

  • 複数の拡張で FREObject 変数を共有することはできません。

    注意: FREObject 変数は、同じ拡張の複数の拡張コンテキスト間で共有できます。ただし、どのような場合でも、コールスタック上の最初の FREFunction 関数がランタイムに戻されると、FREObject 変数は無効になります。