8: 2018-01-08 (月) 22:38:58 njf |
9: 2018-01-10 (水) 17:04:56 njf |
| このうち終了関数については、終了処理がないなら特に定義しなくてもかまいません。 | | このうち終了関数については、終了処理がないなら特に定義しなくてもかまいません。 |
| | | |
| + | この事を踏まえて、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); |
| + | |
| + | 以上でライブラリの作成は終わりです。 |