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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0321
トノ新規命令内での getenv3解決


トノ

リンク

2020/3/21(Sat) 17:03:31|NO.89773

次のスクリプトだと、期待どおり、環境変数 SystemRoot の値が
表示されます。

#include "hspinet.as" getenv env_SystemRoot, "SystemRoot" dialog env_SystemRoot end

しかし、環境変数値の取得部分を新規命令としてまとめるべく次のようにすると、
エラーになります。

#include "hspinet.as" func_env end #module #deffunc func_env getenv env_SystemRoot, "SystemRoot" dialog env_SystemRoot return #global
結果レポートには次のように表示されます。
#HSP script preprocessor ver3.5 / onion software 1997-2017(c)
#Use file [hspdef.as]
#HSP code generator ver3.5 / onion software 1997-2017(c)
getenv_ng.hsp(6) : error 2 : 文法が間違っています (6行目)
--> getenv@m1 env_systemroot@m1, "SystemRoot"

なぜエラーになってしまうのでしょうか。



この記事に返信する


あらや

リンク

2020/3/21(Sat) 17:57:25|NO.89776

問題が2つあります。

問題1.getenvがグローバルの命令ではない事。

hspinet.as内で『#func getenv getenv2 $202』と定義されているので
モジュール内でそのまま使う事は出来ません。

#func global getenv getenv2 $202
と書き換えるか、もしくはモジュール内では@を付けるかしないと使えません。

getenv@ env_SystemRoot, "SystemRoot"



問題2.ソースの順番
理由は不明ですが、外部DLLの命令をモジュール内で使う場合
先にモジュールを用意しておかないといけないようです。

エラーになる例

#include "hspinet.as" func_env end #module #deffunc func_env getenv@ env_SystemRoot, "SystemRoot" dialog env_SystemRoot return #global
エラーが起きない例

#include "hspinet.as" #module #deffunc func_env getenv@ env_SystemRoot, "SystemRoot" dialog env_SystemRoot return #global func_env end



トノ

リンク

2020/3/22(Sun) 17:54:56|NO.89787

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

教えていただいたところに従い変更したところ、
エラーなく動作するようになりました。

なぜこのような仕様/挙動になっているのか分からなくて
すっきりしないところがありますが、解決です。



トノ

リンク

2020/3/26(Thu) 17:38:31|NO.89833

いじくっているうちに面白いことに気がつきました。

あらやさんが NO.89776 で指摘くださったうちの問題 2 については、
モジュールを後回しにしても、#include より後ろのモジュール外で
一度 getenv を記述してあれば、エラーにならないようです。


;getenv dymmy, "" ; <-- ここでは NG #include "hspinet.as" getenv dummy, "" ; <-- これで OK func_env ;getenv dummy, "" ; <-- ここでも OK end ;getenv dummy, "" ; <-- ここでも OK #module #deffunc func_env getenv@ env_SystemRoot, "SystemRoot" dialog env_SystemRoot return #global ;getenv dummy, "" ; <-- ここでも OK

蛇足でしょうけどご報告まで。



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