我只是想从 .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 stats 在文件的第二行,它返回预期值。
起初我认为这是在声明中使用 W 版本和 Unicode 的问题,但更改这些似乎没有任何效果。
我错过了什么?
最佳答案
检查您打开的文件是否有 byte order mark (标记文本编码类型的几个字节)。
这些 Windows API 调用似乎无法理解字节顺序标记,并且导致它们错过了第一部分(因此,如果有空行,则一切正常)。
关于winapi - GetPrivateProfileString 奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124786/