Domanda

Stavo solo cercando di chiamare GetPrivateProfileString e GetPrivateProfileSection in kernel32 da .NET e mi sono imbattuto in qualcosa di strano che non capisco.

Cominciamo con questa incanto:

    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

Se passo un lpApplicationName (sezione), nessun lpKeyName e nessun lpDefault, dovrei ottenere tutte le chiavi per quella sezione, e in effetti lo faccio: il 50% delle volte.

Se il file ini ha lpApplicationName a partire dalla prima riga, il buffer non restituisce nulla. Se le statistiche lpApplicationName sulla seconda riga del file, restituisce i valori previsti.

All'inizio ho pensato che fosse una questione di usare la versione W e Unicode in Declare, ma cambiare quelle sembra non avere alcun effetto.

Cosa mi sto perdendo?

È stato utile?

Soluzione

Verifica se il file che stai aprendo ha un contrassegno dell'ordine dei byte (a pochi byte che contrassegnano il tipo di codifica del testo).

Queste chiamate all'API di Windows non sembrano far apparire i segni dell'ordine dei byte e ciò causa loro di perdere la prima sezione (quindi tutto funziona bene se c'è una riga vuota).

Altri suggerimenti

Buona chiamata. La modifica del file ini in VS.NET ovviamente (Duh) aggiunge una DBA utf-8. Grrr. Aprendolo nel blocco note e facendo un SaveAs ASCII si ottengono i risultati previsti.

Così ovvio. Così ottuso. Un'altra ora giù per il crapper. : -)

Grazie! - = Chris

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top