HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1228
zezenanaWINビルドとNDKビルドを#ifdef分岐したい2解決


zezenana

リンク

2021/12/28(Tue) 23:11:36|NO.94816

先日質問したmes命令の問題とも関係するのですが、

Android環境でのみ落ちるスクリプトについて
(たとえば onexitや 2次元配列の連続代入など)、

Windows環境とAndroid環境でスクリプトを変更させたいのですが
_debug や __hsp3dish__ のようなプリプロセッサが
自動的に追加されるマクロは存在するのでしょうか?

色々と調べた感じでは、hsp3config.h に記載してある環境フラグ?が
使えるかなとも思ったのですがどれも未定義のようでイマイチ理解しておりません。

hsp3config.h コメントの抜粋

// // 環境フラグ:以下のラベルはコンパイルオプションで設定されます // //#define HSPWIN // Windows(WIN32) version flag //#define HSPMAC // Macintosh version flag //#define HSPLINUX // Linux(CLI) version flag //#define HSPIOS // iOS version flag //#define HSPNDK // android NDK version flag //#define HSPDISH // HSP3Dish flag //#define HSPDISHGP // HSP3Dish(HGIMG4) flag //#define HSPEMBED // HSP3 Embed runtime flag //#define HSPEMSCRIPTEN // EMSCRIPTEN version flag //#define HSP64 // 64bit compile flag //#define HSPUTF8 // UTF8使用フラグ

すみませんが、
WINビルドとNDKビルドによってスクリプトを上手く分岐させる方法がありましたら
お教え願えませんでしょうか?



この記事に返信する


おにたま(管理人)

リンク

2021/12/29(Wed) 11:41:59|NO.94820

機種ごとの#define定義は今のところありませんので、実行時に判別していただければと思います。
システム変数のhspstatを使用するか、HSP3Dishであればsysinfo(0)をご使用ください。

info_os = sysinfo(0) flag_ios=0:flag_and=0:flag_win=0 if instr(info_os,0,"iOS")>=0 : flag_ios=1 if instr(info_os,0,"android")>=0 : flag_and=1 if instr(info_os,0,"Windows")>=0 : flag_win=1



zezenana

リンク

2021/12/29(Wed) 22:19:58|NO.94825

おにたま(管理人) さん

ご返答ありがとうございます。

>機種ごとの#define定義は今のところありませんので、
>実行時に判別していただければと思います。

現時点では機種ごとの #define定義が未実装なのですね。了解しました。
他コンパイラにある引数のマクロ定義のように組み込まれてるのかなとか思っていました。

既にコメントアウトでの #if #endifの Win/Android切り替えは組み込んでいるのですが、
実行ファイル作成(Win版exe)やNDKビルド時(Android版apk)に毎回ファイル書き換えなしに
自動で出来ればと思って質問してみたのですが。
機種ごとの #define定義、実装されることをお待ちしています。

>システム変数のhspstatを使用するか、
>HSP3Dishであればsysinfo(0)をご使用ください。

実行時に判別ということは、固定条件のif処理と(Win版 exeだと flag_winは常に1固定)
使われないスクリプトが exeや apkに含まれることになるのですね。

この点が少しモヤッとしますが、小規模な切り替えならその手法でも良さそうです。
複雑になりそうならファイル書き換えでの #if #endif対応で乗り切ります。

試してみます。ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.