GetPrivateProfileString奇数

时间:2020-03-06 14:38:11  来源:igfitidea点击:

我只是在修补从.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

如果我传递了一个lpApplicationName(部分),没有lpKeyName和没有lpDefault,那么我应该获得该部分的所有键,并且确实可以:50%的时间。

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

起初我虽然是在声明中使用W版本和Unicode的问题,但是更改这些似乎无效。

我想念什么?

解决方案

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

这些Windows API调用似乎没有产生字节顺序标记,而是导致它们错过了第一部分(因此,如果有空白行,则一切正常。)

好决定。当然,在VS.NET中编辑ini文件是(Duh)添加utf-8 BOM。 rr
在记事本中打开它并执行SaveAs ASCII将产生预期的结果。

如此明显。好钝再过一个小时就消失了。 :-)

谢谢!
-=克里斯