Pregunta GetPrivateProfileString Oddity


Solo estaba haciendo pequeños retoques con la llamada a GetPrivateProfileString y GetPrivateProfileSection en kernel32 desde .NET y encontré algo extraño que no entiendo.

Comencemos con esta encantación:

    Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    ByVal lpDefault As String, _
    ByVal lpReturnedString() As Char, _
    ByVal nSize As Int32, _
    ByVal lpFileName As String) As Int32

Si paso un lpApplicationName (sección), no lpKeyName y no lpDefault, debería obtener todas las claves para esa sección, y de hecho lo hago: el 50% del tiempo.

Si el archivo ini tiene el lpApplicationName a partir de la primera línea, el búfer no devuelve nada. Si lpApplicationName stats en la segunda línea del archivo, devuelve los valores esperados.

Al principio pensé que era una cuestión de usar la versión W y Unicode en el Declare, pero cambiarlas parece no tener ningún efecto.

¿Qué me estoy perdiendo?


5
2017-09-24 00:49


origen


Respuestas:


Verifique si el archivo que está abriendo tiene un marca de orden de bytes (unos pocos bytes que marcan el tipo de codificación de texto).

Estas llamadas a la API de Windows no parecen acumular marcas de orden de bytes y hacen que pierdan la primera sección (por lo tanto, todo funciona bien si hay una línea en blanco).


9
2017-09-24 01:00



Buena llamada. La edición del archivo ini en VS.NET es, por supuesto, (Duh) agregar una lista de materiales para utf-8. Grrr. Abrirlo en el bloc de notas y hacer un Save AS ASCII produce los resultados esperados.

Tan obvio. Tan obtuso. Otra hora más abajo del crapper. :-)

¡Gracias! - = Chris


1
2017-09-24 01:06