[DllImport("kernel32.dll")]
static extern uint GetPrivateProfileSection(string lpAppName,
IntPtr lpReturnedString, uint nSize, string lpFileName);
None.
None.
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 or Comments? mailto:ShawnViATgmailDOTcom
Please add some!
Do you know one? Please contribute it!