最近VB.NETで開発をはじめて、APIを使用したくて作ってみたのですが、うまく動作しません。
以下のコードでINIファイルから初期値を取得しようとしてます。
[public]
Public iFile_num As Integer
Public gFile_name() As String
Public sInifile As String = "D\:xxxxxxxxx.ini"
[module.vb]
'INIファイル情報読込み
Public Sub funcIniGet()
Dim sKey As String
Dim icnt1 As Integer
Dim iRet As Integer
'対象ファイル数
iFile_num = GetPrivateProfileInt("PREFILE_LST", "FILE_NUM", 99, sInifile)
'対象ファイル名
ReDim gFile_name(iFile_num)
For icnt1 = 0 To iFile_num - 1
sKey = "NAME_" & Format(icnt1 + 1, "00")
gFile_name(icnt1) = New String(CChar(" "), 64)
iRet = GetPrivateProfileString("PREFILE_LST", sKey, "GET_ERR", gFile_name(icnt1), 64, sInifile)
Next icnt1
End Sub
GetPrivateProfileIntでは正常に値を取得できるのですが、次のGetPrivateProfileStringで失敗します。
試しに順番を入れ換えて動かしてみたのですが(変数は固定数にしました)、その時はGetPrivateProfileStringが正常に動作しGetPrivateProfileIntが失敗してしまいます。
まだ開発はじめたばかりなので、ネットでいろいろ調べてみたのですが解決できません。
原因がわかる方がおられたら回答願えませんでしょうか。
よろしくお願い致します。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconupgraderecommendationadjustdatatypesforwin32apis.asp
このページ後半のことが、関係しています。
ご参考までに。
以上。
岡田 之仁さんご返答有り難うございます。
教えて戴いたHPをみたのですが、申し訳ありません、
殆ど理解出来ませんでした。
「GetPrivateProfileStringNullKey 」
を使用すれば良いという事でしょうか?
longをinteger等にかえてみて使用してみましたが
やはり同じように2回目以降失敗してしまいます。
もし宜しければ、もう少しかみ砕いてご教授戴けると有り難いのですが。
宜しくお願い致します。
解決しました。
どうやらINIファイルパスが長いもしくは漢字が入っていた為失敗していたみたいです。
以下のどちらかの対応で何度でも成功する様になりました。
◆ファイルパスを短くする
◆API関数を呼び出す直前に毎回ファイルパスをセットする
お騒がせしました。
みなさま有り難う御座いました。
「解決」チェック忘れてました
編集 削除既に解決されているようなので蛇足ですが、
GetPrivateProfileString関数の使用方法とこの関数(だけに限らないと思いますが)での
日本語を含む文字列を扱う場合の問題に関する実験を私のページで掲載しているので、
よろしかったら下記をご覧下さい。
[特集6] GetPrivateProfileStringにみるAPIの使用方法
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp06_GetPrivateProfileString.html
「[Ref2] GetPrivateProfileString関数の様々な宣言法によるWin2000、Win98での実行結果の成否 」
http://www5b.biglobe.ne.jp/~yone-ken/VBNET/Reference/ref2_GetPrivateProfileString.html