こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

iniファイルの全セクションを取得し、ListBoxのitemにするには?VB2008

こんにちは。VB2008を使用しています。
「Formロード時にiniファイルの全セクションを取得し、セクション1つずつをlistboxの項目にする」
という流れのコードを作成したいのですが、うまくいきません。
似たような質問などを調べてつぎはぎしてみたものの、うまく理解できなく困っています。

以下、現在記述中のコードです。

'APIの宣言
Declare Function GetPrivateProfileSectionNames Lib "Kernel32.dll" _
Alias "GetPrivateProfileSectionNamesA" _
(ByVal lpszReturnBuffer As string, ByVal nSize As Integer, _
ByVal lpFileName As String) As String

'form1ロード時
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim listboxsec As String
Dim listboxitem() As String
listboxsec.Capacity = 256

GetPrivateProfileSectionNames(listboxsec, 256, "./FileTest.ini")

listboxitem = Split(listboxsec, "\")

End Sub

最初の全セクションの取得方法がイマイチ分からない状況です。iniファイルは実行プログラムと同じ場所においてあります。
取得したセクションをSplitで配列に分け、for文でlistboxに追加していこうかと考えています。

どのような記述をすればいいのか、ご教示お願いいたします。

投稿日時 - 2009-12-11 00:50:50

QNo.5513547

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

“VB GetPrivateProfileSectionNames”で検索してないのでしょうか?
Declare 文も違っているようです。

◎VB.NETの場合
Declare Function GetPrivateProfileSectionNames lib "Kernel32.dll" _
Alias "GetPrivateProfileSectionNamesA" _
(ByVal lpszReturnBuffer As String, ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer

◎MSDNの説明
・パラメータ
lpszReturnBuffer
このバッファに、指定した .ini ファイル内に存在するすべてのセクション名が格納されます。
セクション名とセクション名の間に NULL が挿入されます。
その結果、このバッファには、NULL で終わる文字列が 1 つまたは複数格納されます。
バッファの最後には、もう 1 つの NULL が挿入されます。

nSize
lpszReturnBuffer パラメータが指すバッファのサイズを、TCHAR 単位で指定します。

lpFileName
.ini ファイルの名前を指定します。

・戻り値
バッファに格納された文字数が返ります(最後の 1 つの NULL を除く)。
バッファのサイズが不足した場合、nSize-2 の値が返ります。

◎注意点
APIは文字列の領域確保はしないので、APIに渡す文字変数には十分な大きさを持たせること。
listboxsec = Space(1024) とかにしておく。
セクション名の区切りは NULL (=Chr(0))。

投稿日時 - 2009-12-11 21:09:16

あなたにオススメの質問