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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0214
GrapeColor(DION)いきなりini操作ができなくなった10解決


GrapeColor(DION)

リンク

2012/2/14(Tue) 00:47:31|NO.44853

前からソフトを作るときに、よくiniを使うのですが、
前に教えてもらった方法でいきなりini操作が出来なくなりました。
http://hsp.tv/play/pforum.php?mode=pastwch&num=41819
どうやら自分のプログラムが間違っているわけでは無い様で、
既に作ってあったiniを使ったソフトも動かなくなっていました。
読み書きどちらも不可です。
int形式の場合0が返り、str形式の場合1バイトも返ってきません。
PCは何回も再起動させました。
OSはWinXP Pro SP3です。
これはkernel32.dllの異常なのでしょうか?
どなたか教えてください。



この記事に返信する


GrapeColor(DION)

リンク

2012/2/14(Tue) 00:59:25|NO.44854

〜追記〜

何故か開発中のソフトがあるフォルダで上の投稿のURLに貼ってあるサンプルのプログラムを実行すると、
iniファイルが作成されていないにも関わらず正常な結果が返ってきます。
しかし、他のフォルダで試すとiniファイルが作られないのはもちろん、結果は上の投稿と同じでした。

それと、以前作ったソフトはエディタから実行したり、今現在コンパイルした実行ファイルを実行すると上の投稿と同じ結果ですが。
そのソフトを作った当時にコンパイルした実行ファイルは正常でした。



MillkeyWeler

リンク

2012/2/14(Tue) 02:55:16|NO.44856

WritePrivateProfileString系の事と判断し答えます。

>>何故か開発中のソフトがあるフォルダで上の投稿のURLに貼ってあるサンプルのプログラムを実行すると、
iniファイルが作成されていないにも関わらず正常な結果が返ってきます。

の正常な結果って、stat値は、どーなっているのかなー?

WritePrivateProfileString の戻り値は、0 が失敗で、0以外 は成功なんだけど。



KA

リンク

2012/2/14(Tue) 04:49:59|NO.44858

前にも誰かが書いていたけど、INIファイルなんてただのテキストファイルです。
下手にAPIなんか使うからおかしくなっちゃいます、自前で作りましょう。

それはさておき、前と同じ環境なのか良く分かりません。
同じ環境だったらパソコンがおかしいです。



GrapeColor(DION)

リンク

2012/2/14(Tue) 11:51:58|NO.44862

>>MillkeyWeler
statには1が返っていました。
(ところで何故怒り気味なんですか?)

>>KA
環境は変わってません。



GrapeColor(DION)

リンク

2012/2/14(Tue) 11:55:22|NO.44863

さんを付け忘れました。
わざとでは無いですが申し訳ありません。



check

リンク

2012/2/14(Tue) 15:56:53|NO.44864

>(ところで何故怒り気味なんですか?)
関数の返り値もろくすっぽ調べようとせずに質問するからだろう。

前とまったく同じ環境で、上手く動かないのなら、kernel32.dllがウイルスに汚染されているか、
氏の頭がウイルスに汚染されているかのどちらかだろう。
長いプログラム中に、Iniファイルの操作を行っているのであれば、
一度Iniファイルが読み書きできる最小のプログラムを作ってテストをしてみたらどうだ。

ちなみに、○○PrivateProfileString系の関数はWin95時代に使われていたAPIで、
現在は使用をMicrosoftは進めていない。
だから、KA氏の言うとおりそれに代わる関数を自作するほうがいいかもしれない。



GrapeColor(DION)

リンク

2012/2/14(Tue) 18:04:47|NO.44866

>>checkさん
>関数の返り値もろくすっぽ調べようとせずに質問するからだろう。
関数に戻り値があることを全く知りませんでした。すみません。

>氏の頭がウイルスに汚染されているか
わざわざ言う必要がありますか。

>一度Iniファイルが読み書きできる最小のプログラムを作ってテストをしてみたらどうだ。
質問の文を読み直してください。

>だから、KA氏の言うとおりそれに代わる関数を自作するほうがいいかもしれない。
そうですね。やってみます。



check

リンク

2012/2/14(Tue) 19:45:50|NO.44871

言い方が悪かったな。
>何故か開発中のソフトがあるフォルダで上の投稿のURLに貼ってあるサンプルのプログラムを実行すると、
>iniファイルが作成されていないにも関わらず正常な結果が返ってきます。
>しかし、他のフォルダで試すとiniファイルが作られないのはもちろん、結果は上の投稿と同じでした。
と書いてあるので、どういう条件で試したか知らないが、
ディレクトリによって動作が変わるようなら
もっと詳しくテストをしたほうがいいのではないかと俺は言いたかった。



MillkeyWeler

リンク

2012/2/14(Tue) 21:18:54|NO.44872

とりあえず、怒ってはいないけどねー。
stat が 1 と言う事だから、関数は失敗していないわけだなー。

そーなると、check さんが言うように、ディレクトリレベルの問題になるのかと。
iniファイルを保存させるときのパスが絶対パスであれば、そのディレクトリに保存されるのだが、
関数上の問題で、ファイル名のみでファイルを指定する場合と、絶対パスで保存する場合とでは保存されるディレクトリが違う。

[参考ソース]

#uselib "kernel32.dll" #func WritePrivateProfileString "WritePrivateProfileStringA" sptr,sptr,sptr,sptr #func GetPrivateProfileString "GetPrivateProfileStringA" sptr,sptr,sptr,var,sptr,sptr a="GrapeColor" b="check" c="MillkeyWeler" save_url_a="testini.ini" WritePrivateProfileString a,b,c,save_url_a mes "stat = "+stat a="GrapeColor" b="check" c="" GetPrivateProfileString a,b,"",c,64,save_url_a mes "stat = "+stat mes ""+a mes ""+b mes ""+c

この場合で、Windowsのアカウントが管理者で起動している場合、保存されるディレクトリは、Windowsディレクトリ(c:\Windows)に保存される。
で、標準ユーザで起動している場合は、各ユーザの VirtualStore に保存される。

カレントディレクトリに保存したい場合(指定したディレクトリを含む)は、カレントディレクトリ含めた絶対パスで指定。

最後にだけど、この関数は、check さんも言ったが、Windows95 時代の物であり、現在の32bit OS用(64bit含む)ではない。



GrapeColor(DION)

リンク

2012/2/14(Tue) 21:46:47|NO.44874

色々テストしたところ、何故か改善されたので解決(?)しました。
皆さん有難うございました。



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