我只是在.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(section),没有lpKeyName而没有lpDefault,我应该得到该部分的所有密钥,而且确实是这样:50%的时间.
如果ini文件在第一行开始有lpApplicationName,则缓冲区不返回任何内容.如果lpApplicationName统计信息位于文件的第二行,则返回预期值.
起初我虽然是在Declare中使用W版本和Unicode的问题,但改变它们似乎没有任何效果.
我错过了什么?
检查您打开的文件是否有字节顺序标记(标记文本编码类型的几个字节).
这些Windows API调用似乎没有grok字节顺序标记,并导致它们错过第一部分(因此如果有一个空行,一切正常).