ネイティブ C メソッドを使用するには、拡張の ActionScript 側で、最初に
ExtensionContext.createExtensionContext()
静的メソッドを呼び出します。
createExtensionContext()
を呼び出すと、ランタイムは次の処理を実行します。
拡張コンテキスト初期化関数は、新しい拡張コンテキスト向けのネイティブ実装を初期化します。拡張コンテキスト初期化関数は、
FREContextInitializer()
のシグネチャを使用して定義します。
例えば、Vibration の例では、次の関数を使用します。
void ContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx,
uint32_t* numFunctionsToSet,
const FRENamedFunction** functionsToSet) {
*numFunctionsToSet = 2;
FRENamedFunction* func = (FRENamedFunction*)malloc(sizeof(FRENamedFunction)*2);
func[0].name = (const uint8_t*)"isSupported";
func[0].functionData = NULL;
func[0].function = &IsSupported;
func[1].name = (const uint8_t*)"vibrateDevice";
func[1].functionData = NULL;
func[1].function = &VibrateDevice;
*functionsToSet = func;
}
コンテキスト初期化関数は、次の入力パラメーターを受け取ります。
-
拡張初期化関数が作成した拡張データ。
拡張の初期化
を参照してください。
-
コンテキストタイプ。ActionScript メソッドの
ExtensionContext.createExtensionContext()
に、コンテキストタイプを指定するパラメーターが渡されます。ランタイムは、コンテキスト初期化関数に、この文字列値を渡します。次に、この関数はこのコンテキストタイプを使用して、ActionScript 側で呼び出すことのできる、ネイティブ実装内のメソッドセットを選択します。各コンテキストタイプは様々なメソッドセットに対応します。
コンテキストタイプ
を参照してください。
コンテキストタイプの値は、ActionScript 側とネイティブ側の間で合意した任意の文字列です。
拡張がネイティブ実装でのメソッドセットを 1 つだけ持つ場合は、
ExtensionContext.createExtensionContext()
に null または空の文字列を渡します。さらに、拡張コンテキスト initializer では、このコンテキストタイプパラメーターを無視します。
-
FREContext 値。ランタイムは、拡張コンテキストを作成するときに内部データを作成します。内部データと ActionScript 側の ExtensionContext クラスインスタンスを関連付けます。
ネイティブ実装が ActionScript 側にイベントを送出するときに、この FREContext 値を指定します。ランタイムは、FREContext 値を使用して、ExtensionContext インスタンスに対応するイベントを送出し ます。
FREDispatchStatusEventAsync()
を参照してください。
また、ネイティブ関数はこの値を使用して、コンテキスト固有のネイティブデータおよびコンテキスト固有の ActionScript データにアクセスし、これらのデータを設定できます。
拡張コンテキスト初期化関数は、次の出力パラメーターを設定します。
-
ネイティブ関数の配列。ActionScript 側では、ExtensionContext インスタンスの
call()
メソッドを使用してこれらの関数のそれぞれを呼び出すことができます。
各配列エレメントの型は
FRENamedFunction
です。この構造体には、ActionScript 側で関数を呼び出すために使用する名前となる文字列が含まれます。また、この構造体には、ユーザー記述の C 関数へのポインターも含まれます。ランタイムが名前と C 関数を関連付けます。名前の文字列が実際の関数名と一致する必要はありませんが、通常は同じ名前を使用します。
-
ネイティブ関数の配列内にある関数の数。
FREContextInitializer()
関数を呼び出す AIR ランタイムを示すシーケンス図については、
拡張の初期化
を参照してください。