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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0526
とあるプログラマvload時の整合性チェックに関して4未解決


とあるプログラマ

リンク

2020/5/26(Tue) 12:17:52|NO.90649

vsave・vloadで変数をファイルに出力できることを知ったのですが、このvsaveで保存された変数がスクリプトで記述されている変数と整合しているかを確認する方法はないでしょうか。
普通のintやstr変数であれば問題は無いようですが、モジュール型変数だとその定義元モジュールが保存されている状態と違うとnullになります。

考えられる状況としては、古いバージョンで保存されている変数をモジュールの内容が変わった新しいバージョンでロードするときなどです。
existとvarsizeでサイズ比較して整合性チェックできるかと思ったのですが、変数サイズと保存されたファイルサイズでの関係性も分からず難しい状況です。

自分でmemcpyやbsave/bload等使って独自のフォーマットにする方がいいのでしょうか。


サンプル

// 初回:#if 1 にする // 初回実行後:#if 0 にする #if 1 // ************** // 仮想的に古いコード // ************** #module test_struct \ hoge, piyo #modinit hoge = 100 piyo = "HSP3" return #global newmod test_var, test_struct // 古いコードで変数を保存する vsave "var.dat" stop #else // ************** // 仮想的に新しいコード // ************** #module test_struct \ hoge, piyo, fuga #modinit hoge = 100 piyo = "HSP3" fuga = 0.5 return #global newmod test_var, test_struct // 新しいコードで古いコードでの変数を呼び出す vload "var.dat" // ここで test_var が null になる。 stop #endif



この記事に返信する


とあるプログラマ

リンク

2020/5/26(Tue) 12:19:29|NO.90650

すみません、サンプルコードの先頭の

#include "hspda.as"
が抜けていました。付け足してください。



とあるプログラマ

リンク

2020/5/26(Tue) 12:53:49|NO.90651

本題とはずれてしまいますが、
memcpyでのテストを行ったのですが、モジュール型変数の内容を保存してあとから呼び出すとHSP3がクラッシュしてしまいました。

ふと疑問に思って調べたのですが(以下のサンプル)、モジュール型変数ってインスタンスに各メンバ変数の実体を格納しているのではなく、ポインタを保管しているのでしょうか…?

文字列型メンバ変数のサイズを変更してもモジュール型変数そのもののサイズが変わらないので、そのような気がするのですが…


#module test_struct \ hoge, piyo #modinit hoge = 100 piyo = "HSP3" return #modfunc Replace hoge = $80000000 piyo = {"雨ニモマケズ 風ニモマケズ 雪ニモ夏ノ暑サニモマケヌ 丈夫ナカラダヲモチ 慾ハナク 決シテ瞋ラズ イツモシヅカニワラッテヰル 一日ニ玄米四合ト 味噌ト少シノ野菜ヲタベ アラユルコトヲ ジブンヲカンジョウニ入レズニ ヨクミキキシワカリ ソシテワスレズ 野原ノ松ノ林ノ䕃ノ 小サナ萱ブキノ小屋ニヰテ 東ニ病気ノコドモアレバ 行ッテ看病シテヤリ 西ニツカレタ母アレバ 行ッテソノ稲ノ束ヲ負ヒ 南ニ死ニサウナ人アレバ 行ッテコハガラナクテモイヽトイヒ 北ニケンクヮヤソショウガアレバ ツマラナイカラヤメロトイヒ ヒデリノトキハナミダヲナガシ サムサノナツハオロオロアルキ ミンナニデクノボートヨバレ ホメラレモセズ クニモサレズ サウイフモノニ ワタシハナリタイ"} return #global newmod var, test_struct mes "内容変更前サイズ:" + varsize(var) + "" Replace var mes "内容変更後サイズ:" + varsize(var) + ""



MillkeyStars

リンク

2020/5/26(Tue) 14:36:57|NO.90652

型名と型自体のサイズが不一致してるから、読み込めない。
hoge, piyo で保存した情報を hoge, piyo, huga で読み込もうとしてるよね。

vload の説明にも書いてあるけど、まったく同一な変数構造・変数名でなければならない。



とあるプログラマ

リンク

2020/5/27(Wed) 11:34:31|NO.90662

ということはファイルサイズ等確認して整合性に問題があれば読み込まない といってことは難しいのでしょうか?

memcpyも駄目なようなので、やはり#modfunc¬esaveで処理するかsetter/getterで処理するしかないのでしょうか…



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