5

我只是在修补从 .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 在文件的第二行,它会返回预期值。

起初我虽然在 Declare 中使用 W 版本和 Unicode,但更改这些似乎没有任何效果。

我错过了什么?

4

2 回答 2

10

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

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

于 2008-09-24T01:00:17.757 回答
1

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

如此明显。这么迟钝。又过了一个小时。:-)

谢谢!-=克里斯

于 2008-09-24T01:06:43.840 回答