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将产生预期的结果。
如此明显。好钝再过一个小时就消失了。 :-)
谢谢!
-=克里斯