GetPrivateProfileString奇怪

cla*_*aco 5 unicode winapi ini encoding

我只是在.NET中调用kernel32中的GetPrivateProfileString和GetPrivateProfileSection,并遇到了一些我不理解的奇怪事情.

让我们从这个咒语开始:

    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
Run Code Online (Sandbox Code Playgroud)

如果我传递一个lpApplicationName(section),没有lpKeyName而没有lpDefault,我应该得到该部分的所有密钥,而且确实是这样:50%的时间.

如果ini文件在第一行开始有lpApplicationName,则缓冲区不返回任何内容.如果lpApplicationName统计信息位于文件的第二行,则返回预期值.

起初我虽然是在Declare中使用W版本和Unicode的问题,但改变它们似乎没有任何效果.

我错过了什么?

Rob*_*ker 9

检查您打开的文件是否有字节顺序标记(标记文本编码类型的几个字节).

这些Windows API调用似乎没有grok字节顺序标记,并导致它们错过第一部分(因此如果有一个空行,一切正常).