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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0919
area#includeが成功しない12解決


area

リンク

2006/9/19(Tue) 17:47:07|NO.2506

こんにちは。
今日は#include命令に失敗しました。
以下がスクリプトです。

main.hsp

#define dlldir "../../dll/" #define inidir "../../ini/" #define moddir "../hederfiles/" #include "" + dlldir + "hspsock.as" #include "" + moddir + "mod_menu.as" #include "" + moddir + "iniapi.as" scr_x=iniloadint("cliant","x",0,"" + inidir + "screen.ini") //Error! scr_y=iniloadint("cliant","y",0,"" + inidir + "screen.ini") //Error!

iniapi.as

//iniloadint(p1,p2,p3,p4) //p1 = セクション名 //p2 = キー名 //p3 = キーorセクションがなかった場合の標準の値 //p4 = ファイル名 //iniloadstr p1,p2,p3,p4,p5,p6 //p1 = セクション名 //p2 = キー名 //p3 = キーorセクションがなかった場合の標準の値 //p4 = 読み込み先の文字列型変数 //p5 = 読み込み最大文字数 //p6 = ファイル名 //setini p1,p2,p3,p4 //p1 = セクション名 //p2 = キー名 //p3 = 書き込む値 //p4 = ファイル名 #uselib "Kernel32.dll" #cfunc iniloadint "GetPrivateProfileIntA" str,str,int,str #func iniloadstr "GetPrivateProfileStringA" str,str,str,var,int,str #func setini "WritePrivateProfileStringA" str,str,str,str

screen.ini

[cliant] x=0 y=0

また、dialogを表示させてもみたのですが、hspsock.asもmod_menu.asもiniapi.asも全て読まれていないみたいです。
あと、#defineでなく、変数にしても同じでした。

よろしくおねがいします。



この記事に返信する


area

リンク

2006/9/19(Tue) 17:48:36|NO.2507

追記:bloadでは読み込みが成功しました。



七次元

リンク

2006/9/19(Tue) 20:25:48|NO.2510

そんな特殊な場所に置かず、一度commonフォルダに入れてみては?



area

リンク

2006/9/19(Tue) 21:04:13|NO.2511

それでもダメでした。
しかし、ソースに直で書いたら成功しました。
まだ未熟なので、頑張ります・・・



Irisawa

リンク

2006/9/19(Tue) 22:52:45|NO.2514

> あと、#defineでなく、変数にしても同じでした。

そもそも、#includeはプリプロセッサなので変数は使用できません。
恐らく、#includeには演算子(+演算子での結合)は使用できません。


#include "../../dll/" + "hspsock.as" #include "../../ini/" + "mod_menu.as" #include "../hederfiles/" + "iniapi.as"

これができないようならできないと思います。
そもそも、エラーはでますか?
#includeのエラーがでないのにincludeされていないということでしょうか。



area

リンク

2006/9/20(Wed) 18:37:06|NO.2528

#includeのエラーは出ませんでした。
#include "../hederfiles/mod_menu.as"
としてもダメでした。

あと、解決チェックしたはずなのに、チェックされていなかったので、再チェック。



七次元

リンク

2006/9/20(Wed) 21:07:46|NO.2531

おかしいですね。
ファイルが読み込まれてないならファイルが見つからないという英文でエラーがでるはず
エラーが出ないということは失敗していないのでは?



area

リンク

2006/9/21(Thu) 17:58:27|NO.2543

ファイルが結合されるなら、aファイルに「dialog ""」と書いて、
bファイルにaファイルをincludeすると、ダイアログが表示されるはずだと思うのですが、
No.2506に書いたように、ダイアログが表示されなかったんです。
自分の考えがおかしいのでしょうか?
それともHSPがおかしいのでしょうか???



kz3

リンク

2006/9/21(Thu) 19:00:15|NO.2544

>ファイルが結合されるなら、aファイルに「dialog ""」と書いて、
>bファイルにaファイルをincludeすると、ダイアログが表示されるはずだと思うのですが、

>a.hsp
dialog ""

>b.hsp
#include "a.hsp"

表示されますよ。自分で書いてみてください。
# 結合と覚えるより「挿入」と覚えたほうがいいかも。

>No.2506に書いたように、ダイアログが表示されなかったんです。

No.2506にdialogなんて見当たりませんよ。

>自分の考えがおかしいのでしょうか?
>それともHSPがおかしいのでしょうか???

HSPもareaさんもおかしくありません。
おかしいのはareaさんの書いているスクリプトです。(#define や hspsock.as や mod_menu.asなど)

今作っているプログラムのコードを掲載しても他の方が実行するのは少々面倒です。(ディレクトリなどを構築しないといけない)
それよりも#includeのテスト用のコードを書いてみてください。



area

リンク

2006/9/22(Fri) 21:00:49|NO.2559

一度、iniapi.asの最終行にダイアログを表示させてみたということです(↓)。

//iniloadint(p1,p2,p3,p4) //p1 = セクション名 //p2 = キー名 //p3 = キーorセクションがなかった場合の標準の値 //p4 = ファイル名 //iniloadstr p1,p2,p3,p4,p5,p6 //p1 = セクション名 //p2 = キー名 //p3 = キーorセクションがなかった場合の標準の値 //p4 = 読み込み先の文字列型変数 //p5 = 読み込み最大文字数 //p6 = ファイル名 //setini p1,p2,p3,p4 //p1 = セクション名 //p2 = キー名 //p3 = 書き込む値 //p4 = ファイル名 #uselib "Kernel32.dll" #cfunc iniloadint "GetPrivateProfileIntA" str,str,int,str #func iniloadstr "GetPrivateProfileStringA" str,str,str,var,int,str #func setini "WritePrivateProfileStringA" str,str,str,str dialog ""
このソースをインクルードしたわけですが、ダイアログが表示されませんでした、ということです。
一度デバッグ用フォルダを作って、コピーしてやってみたら、なんと、成功してしまいました。。。
なぜ、このようなことをしたかと言うと、HSPだとたびたびこのように他フォルダに移動したら出来てしまったという経験が多かったので、一度やってみました。
また、そのときは../../hederfiles/iniapi.asと指定したら、しっかりと読み込んでくれて、
"" + moddir + "iniapi.as"と指定したら正常どおり(?)失敗しました。
この点(別の場所に置いたら成功するということ)についてはいつも困っていたのですが、
できれば対策してほしいです>おにたまさん

P.S.
現在開発中のバージョンはこの問題対応しているのかな???



Kpan

リンク

2006/9/22(Fri) 22:23:08|NO.2562

いまいちフォルダ構造とか分からないので、純粋に設定ファイルから
数値を読み出すスクリプト。

---
main.hsp (任意のフォルダに置く)
#include "mod_ini.as"
mes "X: "+GetPrivateProfileInt ("cliant", "x", , dirinfo (1) + "/screen.ini") mes "Y: "+GetPrivateProfileInt ("cliant", "y", , dirinfo (1) + "/screen.ini")

---
mod_ini.as (main.hspと同じフォルダ、あるいはHSPのcommonフォルダに置く)
#uselib "kernel32"
#cfunc GetPrivateProfileInt "GetPrivateProfileIntA" str, str, int, str dialog ""

---
screen.ini (HSP本体と同じフォルダに置く)
[cliant]
x=77 y=999



Irisawa

リンク

2006/9/22(Fri) 23:27:45|NO.2564

なぜ、ワザワザそんな複雑なディレクトリ構造にして、しかもそれを+演算子で結合する
のか分かりませんがプリプロセッサ命令はコンパイラの前に処理されるので通常の命令と
動作がかなり異なります。
+演算子を使用して結合しようとしたときにエラーにならないのは恐らく不具合だと思い
ます。
(仕様上、+演算子自体が使用できないはずなので)

そのまま普通に定数として書くのはダメなのでしょうか。



area

リンク

2006/9/23(Sat) 22:52:41|NO.2588

>そのまま普通に定数として書くのはダメなのでしょうか。
一度、元のフォルダでもそのまま書いたのですが、エラーも出ず、読み込まれませんでした・・・
それで、フォルダを変えたら、複雑な構成にしても成功しました。
なので、
>現在開発中のバージョンはこの問題対応しているのかな???
という発言をしました。



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