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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0115
のほほん太変数IDから変数の内容を参照8解決


のほほん太

リンク

2010/1/15(Fri) 18:19:23|NO.29970

hspdaプラグインのgetvarid命令で変数IDを取得できますが
その変数IDが示す変数の内容を参照する方法はありますか?

vsave命令が、内部でHSPシステムから全ての変数IDに対する内容を取得しているものと
予想して質問します。



この記事に返信する


のほほん太

リンク

2010/1/16(Sat) 16:34:20|NO.29983

補足します。
まず、質問のとおりのことを行いたい理由を説明します。

複数個の変数があったとして、ウィンドウメッセージを受け取った際に
その変数の中から一つをサブルーチン内で使用するパラメータとして指定したいのですが、
仮の方法として、それぞれの変数のポインタを別に確保しておき、
サブルーチン内でそのポインタからクローンを生成して指定しています。
しかし割り込み処理ということで、ポインタの取得から参照まで間が空いています。

できれば変数IDのように、値の変更や要素の拡張などで変動せず
個別に割り振られた数値から参照できないかと思い、質問しました。


PVal構造体から変数の内容へのポインタを取得できるというので
もし、変数IDの番号の並びと対応しているのであれば
ポインタの取得と参照を即時に行えるかもしれないと考えて、
現在、PVal構造体についての詳細を調べているところです。

指摘できる点などありましたら、助言をお願いします。



KA

リンク

2010/1/17(Sun) 00:15:36|NO.29988

”補足”で、ますます分けが解らなくなります。

”複数個の中の一つ”と書くよりも、”この時に、こうしたい”と書いた方が解りやすい。
そこから、発展させた質問にした方がいい様な気がします。

私には、この辺の内容は回答できませんが、
 <<漠然とした質問や、細かすぎる質問>>
は、逆に回答が遅れたり無視される可能性があります。

取りあえず <変数の”中身”は習得できるが速度が気になる> のでしょうか?



ANTARES

リンク

2010/1/17(Sun) 07:30:08|NO.29991

>その変数の中から一つをサブルーチン内で使用するパラメータとして指定したい
 メッセージ発行時に指定するのなら、「変数を指定する」という仕様を
考え直すべきでしょう。
 通常は参照する可能性のある変数を配列にし、
パラメータとしては添え字を指定します。

 それ以外の場合は普通に変数を参照すればいいだけのはず。



ANTARES

リンク

2010/1/17(Sun) 07:35:30|NO.29992

 もし、参照する可能性のある変数が次元数の異なる配列なら、
カスタムコードを渡して、コード別に場合分け処理します。



のほほん太

リンク

2010/1/17(Sun) 20:30:25|NO.29993

質問の書き方については意見を参考にしつつ、これから改善していきたいと思います。


>取りあえず <変数の”中身”は習得できるが速度が気になる> のでしょうか?

やりたいことで行き詰っている点は一つだけです。
それは、割り込み処理のジャンプ先に変数を渡すことができないことです。
そこでポインタから参照しているわけですが、推奨される方法ではないので避けたいです。

ANTARESさんから仕様の問題点を指摘されたので、
一つの配列変数にまとめる方針でいくことにしました。
付け加えますと、複数個の変数とはモジュール型変数を指しています。
ですので、通常の変数と少し勝手が違うかも。そこは手探りですね。


満足いく回答が得られたのでこれで解決!
KAさん、ANTARESさん、ありがとうございました。



ANTARES

リンク

2010/1/18(Mon) 03:04:32|NO.29997

 モジュール変数にモジュール変数を含めることってできましたっけ?
それができるなら、他のモジュール変数を管理するモジュール変数を
作ればいいだけですが、できないとなると、カスタムコードを
定義するしかないですね。

 モジュール変数を使うのをやめる(二次元配列を複数の
一次元配列にするようなもの)というのが
最も賢明な選択のような気もしますが。



ANTARES

リンク

2010/1/18(Mon) 03:14:39|NO.29999

> モジュール変数を使うのをやめる(二次元配列を複数の
>一次元配列にするようなもの)というのが
>最も賢明な選択のような気もしますが。
 撤回。



のほほん太

リンク

2010/1/18(Mon) 19:09:33|NO.30014

疑問符がついているようですが、


/*================================================ listモジュール変数 ================================================*/ #module list item /*------------------------------------------------ 呼び出しルーチン ------------------------------------------------*/ //初期化呼び出し #modinit str _item item = _item return ;------------------------------------------------- //■アイテム挿入 #define global additem(%1,%2="")\ \ newmod %1,list,%2 ;------------------------------------------------- //■アイテム取得 #modcfunc getitem return item ;------------------------------------------------- #global ;================================================ /*================================================ モジュール配列変数テスト ================================================*/ #module a x,y,msg //■メッセージ挿入 #modfunc addmes int _x,int _y,str _msg additem x,str(_x) additem y,str(_y) additem msg,_msg return ;------------------------------------------------- //■メッセージ表示 #modfunc newmes foreach x px = int(getitem(x(cnt))) py = int(getitem(y(cnt))) pos px,py mes getitem(msg(cnt)) loop return ;------------------------------------------------- #global ;================================================ newmod v,a addmes v(0),0,30,"おはよう" addmes v(0),0,60,"こんにちは" addmes v(0),0,90,"おやすみ" newmod v,a addmes v(1),120,30,"good morning" addmes v(1),120,60,"hello" addmes v(1),120,90,"good night" newmes v(0) wait 100 newmes v(1)

こんな感じでいきたいと思っています。

余談ですが、モジュール変数機能の習得に
上大さん作の拡張デバッグウィンドウの助けを多く借りています。
フリーで使わせてもらえていることをありがたく思っています。



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