GetPrivateProfileString() liefert leeren string, obwohl es einen Standard
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _ "GetPrivateProfileStringA" (ByVal lpApplicationName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Integer, ByVal lpFileName As String) As Integer
Dim value As String = ""
Dim length As Integer
Dim IniFileName As String
GetPrivateProfileString("Config", "UserName", "None", value, length, IniFileName)
aber value
enthält einen leeren string!?
Ich confes, um ein VB-n00b, weniger als eine Woche, in der Tat, aber ich kann nicht sehen, was da schief. Die Datei existiert, enthält einen Abschnitt namens "Config", einen Eintrag mit der Bezeichnung "UserName" mit dem Wert - aber selbst wenn nicht, wäre das nicht value
den Standard?
(Und, Nein, ich will nicht, um die Registrierung verwenden, danke 😉
Edit: Es ist nicht wieder eine leere Zeichenfolge - es ist die Rückkehr, was ich initialisieren value
um vor dem Aufruf GetPrivateProfileString()
.
Welches ist zu sagen, dass wenn ich
Dim value As String = "xxx"
dann ist es stil enthält "xxx" nach den aufrufen und nicht der Standardwert.
Ich habe versucht, schieben die Deklaration der Funktion in den code-block, aber für einige Grund es ' s haben nichts davon - nur sofern Sie sich gewundert, warum ich deine bearbeiteten Frage 🙂
InformationsquelleAutor Mawg | 2010-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Größe in den params-und reserve-Platz für das Ergebnis.
Fügen Sie diese Zeilen vor dem Aufruf der Funktion:
Etwas vergessen: Sie müssen mit der return-Wert der Funktion, so ist dies die Länge von dem tatsächlichen Wert, den Sie bekommen, und verwenden Sie eine
Left(value,length)
um Ihre wirkliche Antwort.InformationsquelleAutor dwo
Stellen Sie sicher codepage Ihrer INI-Datei ist ANSI.
Ich war immer leere Ergebnisse, weil meine ini war in UTF-8.
War nicht offensichtlich für mich.
Dies dauerte eine Weile zu finden! Danke sehr, Sie haben meinen Tag gerettet!
InformationsquelleAutor hypers
Initialisieren
length
undvalue
wie folgt:Auch nach dem code, den Sie geschrieben,
IniFileName
scheint leer. Vielleicht müssen Sie einen Wert zuweisen, der dort auch?InformationsquelleAutor Anax
FYI:
Erhalten Sie auch ein leerer string, wenn Sie Ihre default ist"", und geben Sie einen Namen, der nicht vorhanden ist, oder geben Sie einen Dateinamen ohne vollständigen Pfad. GetPrivateProfileString() nicht einen Fehler zurück, wenn Sie nicht finden können, die Quelle-Datei und benutzt nur die default.
InformationsquelleAutor Sam Jones
Werfen Sie einen Blick auf das Beispiel im PInvoke.net, die Signatur, die Sie verwenden für den Aufruf GetPrivateProfileString ist nicht ganz richtig. Insbesondere die Signatur angezeigt PInvoke.net durchläuft ein StringBuilder-Objekt und die Größe der stringbuilder.
In Ihrem Beispiel, Sie sind vorbei, die durch einen leeren string und eine Länge von null, so dass der Aufruf von GetPrivateProfileString wird immer nur mit leerem Rückgabewert (Länge null) string, denn du erzählst es, dass die Ausgabe-Puffer (Wert) Sie sind vorbei eignet sich für eine null-Länge-Zeichenfolge.
Um das Ergebnis zu erhalten, Sie erwarten, Ihr code muss daher sein:
InformationsquelleAutor Rob