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


HSPTV!掲示板


未解決 解決 停止 削除要請

2019
1021
とあるプログラマ#include はディレクトリを無視する?2解決


とあるプログラマ

リンク

2019/10/21(Mon) 14:46:26|NO.88663

既出だったら申し訳ないのですが、#include命令で指定するパスでのディレクトリ情報って無視されていませんかね。

例えば、

#include "XYZ:/null/directory/user32.as" MessageBox hwnd,"user32命令が使える","",0
これが実行できます。

しかもcommonフォルダに同名のファイルが存在する場合、そのファイルが優先使用されるようです。
common/utf8 にutf8エンコードのヘッダファイルを配置して使用しようと思ったのですが、これだとcommon側の同名ファイル(Shift JIS)が優先されてしまいます。
この場合、ファイル名自体を変更しないと駄目ですかね。



この記事に返信する


MillkeyStars

リンク

2019/10/22(Tue) 11:19:39|NO.88665

相対パスは、hsed3.exe (HSPスクリプトエディタ) のカレントディレクトリ情報によって変動します。
これは、実行ファイル(hsp3.exe) のある場所に関わらず変動します。

絶対パスに関しては、正常に機能します。

相対パス・絶対パス共に、実際のファイルパスに変換した際にファイルが存在しない場合は、すべてディレクトリ情報は無視されます。
この場合、とあるプログラマ さんが言っている通りに hsed3.exe が存在するディレクトリの common フォルダ内の階層のファイルが指定されます。
(本来は、パスが間違っているので読み込んではいけないのですが、hspの仕様だと思います。)



とあるプログラマ

リンク

2019/10/22(Tue) 23:57:49|NO.88669

なるほど、カレントディレクトリがコンパイル時の環境で違ってきてしまうのですか。
だとすれば #include "utf8/ファイル.as" の記述は、
"カレントディレクトリ(恐らくソースファイルの場所)/utf8/ファイル.as" という処理になってファイル無しエラー、
common/ファイル名.as のほうがが使われる。
という流れですね。


しかし #include "llmod3/llmod3.hsp" の場合はちゃんと common/llmod3/llmod3.hsp が使われるんですよね…
ということは相対パスで指定した場合の同名ファイルの優先度は、
ソースファイルのディレクトリ > common > common/以下
ってとこですかね。



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