GetPrivateProfileSection (kernel32)
Last changed: Dan Konigsbach-32.97.110.59

.
Summary

C# Signature:

[DllImport("kernel32.dll")]
static extern uint GetPrivateProfileSection(string lpAppName,
   IntPtr lpReturnedString, uint nSize, string lpFileName);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

In using this function, I discovered that the subsequent call to Marshal.PtrToStringAnsi(lpReturnedString) would only return the first Name=Value pair. I used the following wrapper around this function to convert lpReturnedString into a string[]

public static bool GetPrivateProfileSection(string appName, string fileName, out string[] section)
{
    section = null;

    if (!System.IO.File.Exists(fileName))
        return false;

    uint MAX_BUFFER = 32767;

    IntPtr pReturnedString = Marshal.AllocCoTaskMem((int)MAX_BUFFER);

    uint bytesReturned = GetPrivateProfileSection(appName, pReturnedString, MAX_BUFFER, fileName);

    if ((bytesReturned == MAX_BUFFER - 2) ||(bytesReturned == 0))
        return false;

    System.Text.StringBuilder returnedString = new System.Text.StringBuilder((int)bytesReturned);

    //bytesReturned -1 to remove trailing \0
    for (int i = 0; i < bytesReturned-1; i++)
        returnedString.Append((char)Marshal.ReadByte(new IntPtr((uint)pReturnedString + (uint)i)));

    Marshal.FreeCoTaskMem(pReturnedString);

    section = returnedString.ToString().Split('\0');

    return true;
}

Questions? mailto:ShawnVi@gmail.com

Sample Code:

Please add some!

Alternative Managed API:

Do you know one? Please contribute it!

Documentation