Frage

Ich war bastelt gerade um mit GetPrivateProfileString und GetPrivateProfileSection in kernel32 von .NET aufrufen und stieß auf etwas Merkwürdiges verstehe ich nicht.

Lassen Sie sich mit diesem encantation starten:

    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

Wenn ich einen lpApplicationName (Abschnitt) passieren, kein lpKeyName und kein lpDefault, sollte ich alle Schlüssel für diesen Abschnitt erhalten, und in der Tat ich tue. 50% der Zeit

Wenn die INI-Datei, die lpApplicationName ab der ersten Zeile hat, gibt den Puffer nichts. Wenn lpApplicationName in der zweiten Zeile in der Datei Statistik, gibt sie die erwarteten Werte.

Zuerst dachte ich, es eine Frage der Verwendung der W-Version und Unicode in der Declare war, aber zu ändern diejenigen, scheint keine Wirkung zu haben.

Was bin ich fehlt?

War es hilfreich?

Lösung

Überprüfen Sie, ob die Datei, die Sie öffnen eine Bytereihenfolgemarkierung (a einige Bytes die Art der Textkodierung Markierung).

Diese Windows-API-Aufrufe scheinen nicht Byte Order Mark grok und bewirkt, dass sie den ersten Abschnitt verpassen (daher fein alles funktioniert, wenn es eine leere Zeile ist).

Andere Tipps

Guter Anruf. Die INI-Datei in VS.NET Bearbeitung ist natürlich (Duh) einen utf-8 BOM hinzufügen. Grrr. Öffnen sie im Notizblock und macht ein SaveAs ASCII ergibt die erwarteten Ergebnisse.

So offensichtlich. So stumpf. Noch eine Stunde auf den crapper. : -)

Danke! - = Chris

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top