GetPrivateProfileString奇怪

时间:2008-09-24 00:49:16

标签: winapi unicode encoding ini

我只是在.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的问题,但改变它们似乎没有效果。

我错过了什么?

2 个答案:

答案 0 :(得分:9)

检查您正在打开的文件是否有byte order mark(标记文本编码类型的几个字节)。

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

答案 1 :(得分:1)

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

如此明显。太迟钝了。另一个小时下来的crapper。 : - )

谢谢! - =克里斯