Dim MyString As String = String.Empty
Dim BufferSize As Integer = 1024
Dim PtrToString As IntPtr = IntPtr.Zero
Dim RetVal As Integer
RetVal = GetPrivateProfileSection(SectionName, PtrToString, BufferSize, FileNameAndPah)
Если наш вызов функции завершится успешно, мы получим результат по адресу памяти PtrToString, а RetVal будет содержать длину строки в PtrToString. Иначе, если эта функция не удалась из-за отсутствия достаточного количества BufferSize, тогда RetVal будет содержать BufferSize - 2. Таким образом, мы можем проверить это и снова вызвать эту функцию с большим BufferSize.
'Теперь вот как мы можем получить строку из адреса памяти.
MyString = Marshal.PtrToStringAuto(PtrToString, RetVal - 1)
'Здесь я использую «RetVal - 1», чтобы избежать лишней нулевой строки.
'Теперь нам нужно разбить строку, где появляются нулевые символы.
Dim MyStrArray() As String = MyString.Split(vbNullChar)
Таким образом, этот массив содержит все ваши пары ключей в этом конкретном разделе.
И не забудьте освободить память
Marshal.FreeHGlobal(PtrToString)