我只是在.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的问题,但改变它们似乎没有效果。
我错过了什么?
答案 0 :(得分:9)
检查您正在打开的文件是否有byte order mark(标记文本编码类型的几个字节)。
这些Windows API调用似乎不会记录字节顺序标记,并导致它们错过第一部分(因此如果有空行,一切正常)。
答案 1 :(得分:1)
好的电话。在VS.NET中编辑ini文件当然是(Duh)添加utf-8 BOM。哎呀。 在记事本中打开它并执行SaveAs ASCII会产生预期的结果。
如此明显。太迟钝了。另一个小时下来的crapper。 : - )
谢谢! - =克里斯