Wouldn't it be better if you are porting the app to C# to make use of the Frameworks Registry functions which are far more maintainable and easier to get working.
----- Original Message ----- From: "Bill Schmidt" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Saturday, May 18, 2002 6:19 PM Subject: [DOTNET] Win32 API syntax problem, using C# > I'm trying to convert a working VB.NET WinForms application to C#, and I'm > having trouble with the string buffer being returned from a Win32 API call. > > First, my working VB.NET code: > Public Declare Function GetPrivateProfileString Lib "kernel32" _ > Alias "GetPrivateProfileStringA" _ > (ByVal lpApplicationName As String, _ > ByVal lpKeyName As String, ByVal lpDefault As String, _ > ByVal lpReturnedString As String, ByVal nSize As Integer, _ > ByVal lpFileName As String) As Integer > > lngSize = 127 > strDBLocation = Space(lngSize) & Chr(0) > lngDummy = GetPrivateProfileString("DBLocation", "Path", _ > vbNullString, strDBLocation, lngSize, strINIPath) > strDBLocation = Left(strDBLocation, InStr(strDBLocation, Chr(0)) - 1) > > This code returns the correct strDBLocation string. It also sets lngDummy > to the length of the returned string (23). > > Now, what I think is the equivalent C# code: > [DllImport("kernel32.dll", EntryPoint="GetPrivateProfileStringA", > CharSet=CharSet.Ansi)] > public static extern int GetPrivateProfileString( > string lpApplicationName, string lpKeyName, string lpDefault, > string lpReturnedString, int nSize, string lpFileName); > > intSize = 127; > strDBLocation = new string(' ', intSize) + (char) 0; > intDummy = GetPrivateProfileString("DBLocation", "Path", null, > strDBLocation, intSize, strINIPath); > i = strDBLocation.IndexOf((char) 0); > if (i >= 0) > strDBLocation = strDBLocation.Substring(0, i); > > When I run this in the identical environment, intDummy gets set to 23 > (which is correct), but strDBLocation remains the same as before the call > to GetPrivateProfileString (a 127-char string filled with spaces). I > verified that strINIPath is set to the same value as in the VB app. > > Can someone please tell me what I'm doing wrong? (I've tried switching to > CharSet.Auto and CharSet.Unicode, with no success.) > > Bill > > You can read messages from the DOTNET archive, unsubscribe from DOTNET, or > subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.