8: 2018-01-08 (月) 22:38:58 njf[6] [7] [8] | 9: 2018-01-10 (水) 17:04:56 njf[6] [9] [10] | ||
---|---|---|---|
Line 254: | Line 254: | ||
このうち終了関数については、終了処理がないなら特に定義しなくてもかまいません。 | このうち終了関数については、終了処理がないなら特に定義しなくてもかまいません。 | ||
+ | この事を踏まえて、ANE呼び出し処理は以下のようになります。 | ||
- | &font(Red){作成中}; | + | #import <Foundation/Foundation.h> |
+ | #import "FlashRuntimeExtensions.h" | ||
+ | #import "anealert.h" | ||
+ | |||
+ | AneAlert * aneAlert; | ||
+ | |||
+ | FREObject ANEAlertShow(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]){ | ||
+ | NSLog(@"ANEAlertShow start"); | ||
+ | uint32_t argLength; //引数の長さ | ||
+ | const uint8_t *argBuff; //引数の値保持用 | ||
+ | |||
+ | FREGetObjectAsUTF8(argv[0], &argLength, &argBuff);//引数取得 | ||
+ | NSString *arg1NSString = [NSString stringWithUTF8String:(char*)argBuff];//引数をNSStringへ変換 | ||
+ | |||
+ | FREGetObjectAsUTF8(argv[1], &argLength, &argBuff);//引数取得 | ||
+ | NSString *arg2NSString = [NSString stringWithUTF8String:(char*)argBuff];//引数をNSStringへ変換 | ||
+ | |||
+ | if(aneAlert == nil){ | ||
+ | NSLog(@"ANEAlertShow:init alert!"); | ||
+ | aneAlert = [[AneAlert alloc] init]; | ||
+ | [aneAlert alertWindowInit]; | ||
+ | } | ||
+ | [aneAlert alertWindowShow: arg1NSString : arg2NSString]; | ||
+ | NSLog(@"ANEAlertShow end"); | ||
+ | return NULL; | ||
+ | } | ||
+ | |||
+ | void ANEAlertContextInitializer(void* extData, const uint8_t* ctxType, FREContext ctx, uint32_t* numFunctionsToTest, const FRENamedFunction** functionsToSet) | ||
+ | { | ||
+ | NSLog(@"ANEAlertContextInitializer start"); | ||
+ | |||
+ | *numFunctionsToTest = 1; | ||
+ | |||
+ | FRENamedFunction* func = (FRENamedFunction*) malloc(sizeof(FRENamedFunction) * *numFunctionsToTest); | ||
+ | |||
+ | func[0].name = (const uint8_t*) "alert"; | ||
+ | func[0].functionData = NULL; | ||
+ | func[0].function = &ANEAlertShow; | ||
+ | |||
+ | *functionsToSet = func; | ||
+ | |||
+ | NSLog(@"ANEAlertContextInitializer end"); | ||
+ | } | ||
+ | |||
+ | void ANEAlertInitializer(void** extDataToSet, FREContextInitializer* ctxInitializerToSet, FREContextFinalizer* ctxFinalizerToSet){ | ||
+ | NSLog(@"ANEAlertInitializer start"); | ||
+ | *extDataToSet = NULL; | ||
+ | *ctxInitializerToSet = &ANEAlertContextInitializer; | ||
+ | NSLog(@"ANEAlertInitializer end"); | ||
+ | } | ||
+ | |||
+ | ここでANEAlertInitializerが初期化処理です。この関数名はあとでANEの作成時に必要です。 | ||
+ | ANEAlertContextInitializerは呼び出し関数を定義しています。 | ||
+ | ここではANEAlertShow関数を「alert」という文字列で呼び出せるようにしています。 | ||
+ | ANEAlertShowがアラート表示する関数です。ここで引数の取得方法が特殊なので注意していください。 | ||
+ | FREGetObjectAsUTF8を使っていますが、UTF8以外にも型に合わせたいろいろな関数があります。 | ||
+ | 詳しくは公式ドキュメント「[[ネイティブ C API リファレンス ユーザー使用関数>https://help.adobe.com/ja_JP/air/extensions/WSb464b1207c184b14-62b8e11f12937b86be4-7ff9.html]]」を参照してください。 | ||
+ | |||
+ | 最後にAneAlertCall.mがちゃんとライブラリに含まれているか確認します。ライブラリプロジェクトのターゲット>anealert>「Build Phases」>「Compile Sources」にAneAlertCall.mがあればOKです。Xcodeのファイルの追加を使うとの通常自動で入っています。入っていなかったらここで加えてください。 | ||
+ | |||
+ | &ref(aneAlertComileS.jpg,mw:480,mh:360); | ||
+ | |||
+ | *ライブラリファイル(.aファイル)の取り出し [#q2a8ceec] | ||
+ | |||
+ | ここで作成したライブラリを取り出します。 | ||
+ | まず実機をUSBで接続し、左上のテスト用の端末をその実機とします。 | ||
+ | |||
+ | &ref(targetIpod.jpg,mw:480,mh:360); | ||
+ | |||
+ | こうしないとシミュレーター用のバイナリが書き出されることがあるようです。 | ||
+ | |||
+ | 次にメニューのProductからBuildを選びます。 | ||
+ | これでライブラリが作成されます。 | ||
+ | 少し余分に時間がかかりますが、場合によっては古いファイルが残らないように、念のためCleanしてからBuildした方が良いかも知れません。 | ||
+ | |||
+ | &ref(buildClean.jpg,mw:480,mh:360); | ||
+ | |||
+ | Buildの時に以下のような警告がでますが気にしないでください。 | ||
+ | |||
+ | &ref(FlashRuntimeExtensionCaution.jpg,mw:480,mh:360); | ||
+ | |||
+ | これはコメントの書き方のルールについてで、しかも場所はヘッダーファイルです。実際のライブラリにこの部分は含まれず問題ありません。 | ||
+ | |||
+ | Buildが正常に終われば、左側のProductのところにあるライブラリを右クリックまたはCtrl+クリックします。 | ||
+ | メニューが現れるので「Show in Finder」を選択すればファインダーでライブラリが参照できます。 | ||
+ | |||
+ | もしライブラリがないと赤字で表示されるので、エラーを修正してください。 | ||
+ | |||
+ | &ref(libane.jpg,mw:480,mh:360); | ||
+ | |||
+ | 以上でライブラリの作成は終わりです。 |
(This host) = https://njf.jp