ページ 11

iniファイルの読み込み

Posted: 2006年7月04日(火) 17:04
by 超初心者
見よう見まねで書いたのですが、iniファイルの読み込みがうまくいきませ。

Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Const SIZE = 250
Dim Ack[SIZE] As Byte
GetPrivateProfileString("drivers"+NULL, "wave"+NULL,"Nashi"+NULL, Ack, SIZE, "system.ini"+NULL)

FormatMessageで見ると、”アクセスが拒否されました”とでます。
なぜでしょうか?

Posted: 2006年7月04日(火) 17:49
by konisi
読み込み方に関してはよく分かりませんが、ダブルクォーツで囲った文字列の最後には自動でNULL文字が付くので、
GetPrivateProfileString("drivers", "wave","Nashi", Ack, SIZE, "system.ini")
で大丈夫だと思います。


そういえば、iniファイルを操作するクラスを誰かが作っていたような・・・?思い違いかな。

Re: iniファイルの読み込み

Posted: 2006年7月04日(火) 17:56
by 7
> GetPrivateProfileString("drivers"+NULL, "wave"+NULL,"Nashi"+NULL, Ack, SIZE, "system.ini"+NULL)
NULLは要りません。 WritePrivateProfileString()関数でなんか失敗するなぁ...と思ったらどうやら system.ini っていうINIファイルは作れないようです?。
読み込むことはできますけどね。

Re: iniファイルの読み込み

Posted: 2006年7月04日(火) 19:06
by 超初心者
konisi様、7様

NULLは、取ったり付けたりしながら試しました。
7様のサンプルの様にStringをLPSTRにしたらAPIは反応しました。

しかし、system.iniには、下記の記載が有るのにNasiが帰って来ます。

[drivers]
wave=mmdrv.dll

system.iniをプロジェクトが有るフォルダーにコピーしても同様です。
何故でしょう??

もう1つ教えて下さい。
LPSTRって、ABのHelpに掲載されていない型です。
Helpに無い形式は何から情報を得るのですか??

よろしくお願いします。

Re: iniファイルの読み込み

Posted: 2006年7月04日(火) 19:14
by 超初心者
> しかし、system.iniには、下記の記載が有るのにNasiが帰って来ます。

iniファイルを本来使用するファイルに変更したら取れました。
お騒がせいたしました。
原因は?ですが、Windowsをいじくるつもりは無いので、大丈夫です。

> もう1つ教えて下さい。
> LPSTRって、ABのHelpに掲載されていない型です。
> Helpに無い形式は何から情報を得るのですか??

こちらは、引き続き情報募集中です。
宜しくお願いします。

Posted: 2006年7月04日(火) 19:31
by イグトランス
LPSTRとLPCSTRはABのBytePtrとほぼ同義です。
TypeDefで作ってやれば良いでしょう。
この2つはどちらもC/C++でWindows APIに用いられている型名です。

Re: iniファイルの読み込み

Posted: 2006年7月04日(火) 21:08
by 7
> LPSTRって、ABのHelpに掲載されていない型です。
> Helpに無い形式は何から情報を得るのですか??
ActiveBasicをインストールしたフォルダの中の Include\windows.sbp で定義されています。
そういうのを覗いて調べるとか、自分の場合は文字列検索アプリケーション(Grep検索?って言うのかな?)でActiveBasicのIncludeフォルダの中の全てのファイルに対して「LPSTR」って検索したら発見したという。

ちなみにABHelperにはLPSTRの解説を載せています。宣伝。

自分の場合、LPSTRは文字列バッファ、LPCSTRは文字列リテラルと考えてしまっているんですけど、これを書き分けると文字列バッファを指定すべきなのか、文字列リテラルを指定してもいいのか、すぐに分かって便利です。