まだあった! HSPの落とし穴!
なんだか恒例行事みたいになってきましたが、またまたHSP3dishの罠にはまってしまったので備忘録として載せておきます。
今回ご紹介するのはこちら!(TVショッピング風に)
文字列操作関数です。
以下の関数で、1番目の引数(検索される文字列変数)に文字列型の配列を指定し、かつ要素番号に変数を使うと、androidで動かした場合のみ落ちます。
instr
strmid
strtrim
以下のプログラムでコメントアウトしているところを外して動かしてみてください。落ちます。
#include "hsp3dish.as"redraw 0color 255, 255, 255boxf; 落ちないpos 0, 0color 0, 0, 0_str = "ハロー ワールド"mes _str; 当然落ちない_ret = instr(_str, 0, "ワ")mes str(_ret); 落ちないsdim _arrstr, 32, 4_arrstr(2) = _strmes _arrstr(2)_ret = instr(_arrstr(2), 0, "ワ")mes str(_ret); androidで落ちる;_index = 2;_ret = instr(_arrstr(_index), 0, "w");mes str(_ret); 落ちない_mid = strmid(_str, instr(_str, 0, "ー"), instr(_str, 0, "ル") - instr(_str, 0, "ー"))mes _mid; androidで落ちる;_index = 2;_mid = strmid(_arrstr(_index), 1, 3);mes _mid; 落ちない_trim = strtrim(_str, 3, ' ')mes _trim; androidで落ちる;_index = 2;_trim = strtrim(_arrstr(_index), 3, ' ');mes _trim; 落ちない_rep = _strstrrep _rep, "ル", "ru"mes _rep; 意外と落ちない_index = 3_arrstr(_index) = _arrstr(2)strrep _arrstr(_index), "ル", "ru"mes _rep; androidで落ちる;_splitstr = "12,34,56";split _splitstr, ",", _split1, _split2, _split3;mes _split1;mes _split2;mes _split3redraw 1
不思議なのが、配列の要素数を変数ではなく数字で直書きすると動くところですね。
他に、文字列操作以外の関数でも同じように試してみましたが、特に落ちませんでした。文字列操作だけのようです。
noteselなどの複数行文字列操作も、特に問題ありませんでした。
なお、splitはそもそも配列でなくても落ちました。
そもそもHSP3dishで対応しているの?
一時期は、そもそもandroid上で対応していなさそうというお話も上がっていたようです。
http://hsp.tv/play/pforum.php?mode=pastwch&num=59791
ただ、今は上記のプログラムを動かしてわかる通り、全角文字列に対応しているようです。ルールを守って使えば、とりあえずは利用できるのかな? androidで利用できるようにしたという更新履歴が見つからないですが…いつ修正したんだろう。
splitだけは公式で現在正しく動作していないことが周知されています。
http://www.onionsoft.net/hsp/v34/doclib/hsp3dish_prog.htm#KNOWNBUG
まだまだ発展途上ですね…。
以上、お気をつけてHSP3dishライフをお楽しみください。
(あと修正を切実に願います)
0 件のコメント:
コメントを投稿