Zum Inhalt springen

GetPrivateProfileString


wulfgang

Empfohlene Beiträge

Okay, dann verwende ich Haederdateien.

Noch eine andere Frage. Ich verwende GetPrivateProfileString und bekomme schon wieder Probleme mit Datentypen.

error C2059: syntax error : ')'

error C2664: 'GetPrivateProfileStringW' : cannot convert parameter 1 from 'char [12]' to 'LPCWSTR

Das merkwürdige ist, ich habe meinen Code von einem anderen Beitrag hier im Forum http://forum.fachinformatiker.de/c-compiler-ides-apis/72953-ini-datei-erzeugen-schreiben-lesen.html übernommen und er funktioniert nicht. Warum?

#include "StdAfx.h"

#include "read_serverlist.h"

#include <windows.h>

#include <fstream> 



read_serverlist::read_serverlist(void)

{

	char szSectionName[] = "SectionName";

	char szKeyName[] = "KeyName";

	char szDefaultValue[] = "Value";

	char szFilename[] = "serverlist.ini");

	BOOL bRet;

	char szMyValue[128];

	 GetPrivateProfileString(szSectionName,

		szKeyName,

		NULL,

		szMyValue,

		sizeof(szMyValue),

		szFilename);

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das merkwürdige ist, ich habe meinen Code von einem anderen Beitrag hier im Forum http://forum.fachinformatiker.de/c-compiler-ides-apis/72953-ini-datei-erzeugen-schreiben-lesen.html übernommen und er funktioniert nicht. Warum?

Wenn du Wide-Chars verwendest, dann nimm auch wide-Chars.

Wide character - Wikipedia, the free encyclopedia

Link zu diesem Kommentar
Auf anderen Seiten teilen

Noch eine andere Frage. Ich verwende GetPrivateProfileString
Bitte mach einen neuen Thread auf, wenn du eine weitere Frage hast, die mit der letzten nichts zu tun hat. Ich trenne das mal ab.

Zum ersten Fehler: Ja, was macht die Klammer denn da?

Zum zweiten Fehler: Die Funktionen wollen keine char-Arrays, sondern TCHAR-Arrays.

Das merkwürdige ist, ich habe meinen Code von einem anderen Beitrag hier im Forum http://forum.fachinformatiker.de/c-compiler-ides-apis/72953-ini-datei-erzeugen-schreiben-lesen.html übernommen und er funktioniert nicht. Warum?
Weil du wohl andere Projekteinstellungen hast.

Es wäre wirklich an der Zeit, dass du diese Unicode-Geschichte mal verstehst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weil du wohl andere Projekteinstellungen hast.

Kann ich das im Nachherein noch ändern? Mit Projekteinstellungen ist doch die Unicode-Geschichte gemeint?

Es wäre wirklich an der Zeit, dass du diese Unicode-Geschichte mal verstehst.

Wo kann ich denn darüber was Erfahren? Wikipedia habe ich schon bemüht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich bin noch ein Stück weiter gekommen. Der Compiler meckert nicht mehr. Ich bekomme als Ausgabe leider noch gar nichts. Die INI-Datei befindet sich im gleichen Ordner wie die Sourcedateien. Liegt der Fehler bei meinen

wchar_t szKeyName[] = L"server";
?
#include "StdAfx.h" 

#include "read_serverlist.h" 

#include <windows.h> 

#include <fstream> 

#include <wchar.h> 

#include <wctype.h> 

#include <iostream> 

using namespace std; 



read_serverlist::read_serverlist(void) 

{ 

    wchar_t szSectionName[] = L"onlino"; 

    wchar_t szKeyName[] = L"server"; 

    wchar_t szDefaultValue[] = L"Value"; 

    wchar_t szFilename[] = L"serverlist.ini"; 

    BOOL bRet; 

    wchar_t szValue[128]; 

     GetPrivateProfileString(szSectionName, 

        szKeyName, 

        NULL, 

        szDefaultValue, 

        sizeof(szDefaultValue), 

        szFilename); 


  wcout << szDefaultValue; 

}
Auszug aus meiner INI
[onlino]

server=onlino

login_user=user

password=password

Bearbeitet von wulfgang
Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

Fehlersuchregel Nummer 1: Rückgabewerte prüfen.

Habe als Rückgabewert 5. Ist ja genau die Länge des Defaults Wertes. Die Funktion findet laut Microsoft-Dokumentation die Eigenschaft server meiner Ini-Datei nicht und setzt deshalb den default-Wert. Wieso?

Codierung der Datei auf ANSI oder Unicode?

Habe nachgelesen was Unicode/AMSI ist. Mir bleibt wohl hier nichts anderes übrig als mit Unicode. Im Internet findet man meistens aber Beispiele mit ANSI:(

Mein Code etwas überarbeitet:

wchar_t szSectionName[] = L"onlino"; 

    wchar_t szKeyName_s[] = L"server"; 

    wchar_t servername[] = L"Value"; 

    wchar_t szFilename[] = L"serverlist.ini";   //muss noch variabel gestaltet werden 

    BOOL bRet; 

    wchar_t szMyValue[256]; 

    //Servername wird aus INI-Datei gelesen 

    int laenge; 

    laenge=GetPrivateProfileString(szSectionName, 

        szKeyName_s, 

        servername, 

        szMyValue, 

        sizeof(szMyValue), 

        szFilename); 

        cout << GetLastError()<<"\n"; 

        wcout << szMyValue << " " << laenge;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du musst das noch durch sizeof(wchar_t) teilen.
Jo habe ich jetzt implementiert.

Also meine ini ist in dem Ordner, wo meine Sourcedateien sind, wo meine Exe ist und außerdem im übergeordneten Ordner. Gibt es sonst noch eine Fehlerquelle?

So schreiben kann ich in die Datei auch:

 ofstream file("test.txt");

      file<<a;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also meine ini ist in dem Ordner, wo meine Sourcedateien sind, wo meine Exe ist und außerdem im übergeordneten Ordner.

Das dürfte das Problem sein.

Die MSDN Library sagt zum letzten Parameter:

If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.
Link zu diesem Kommentar
Auf anderen Seiten teilen

If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.

Ja, das war es!!

Noch eine Frage:

Ich möchte mehrere Eigenschaften einlesen.

Bei folgendem Code erhalte ich Bei der Ausgabe des Passwortes nur passw statt password. Der Rückgabewert der zweiten Funktion ist 5. Wenn ich selber die Anzahl der einzulesenden Zeichen erhöhe kommt die Meldung die Meldung

Run-Time Check Failure #2 - Stack around the variable 'password' was corrupted.
Muss ich den Speicher vorher leeeren? Oder was soll das?

nt laenge;

		GetPrivateProfileString(szSectionName,

		szKeyName_s,

		servername,

		nameserver,

		(sizeof(nameserver))/(sizeof(wchar_t)),

		szFilename);

		cout << GetLastError()<<"\n";

		wcout << nameserver << " "; 




	//User wird aus INI-Datei gelesen


	//Passwort wird aus INI-Datei gelesen

    wchar_t szKeyName_p[] = L"password";

	wchar_t password[] = L"Value";

	laenge=GetPrivateProfileString(szSectionName,

		szKeyName_p,

		servername,

		password,

		(sizeof(password))/(sizeof(wchar_t)), //bei  z.B 8 obiger  

                                                                               Fehler

		szFilename);

		wcout << password ;

		cout << laenge << "\n";

Bearbeitet von wulfgang
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja das funktioniert.

Bloß

wchar_t password[] = L"Value";

ist ja ein default-Wert. Wenn nun ein Programm-User einen Wert in der ini-Datei ändert, kann er ja nicht immer den Default im Programm ändern. Gibt es da noch eine einfache Möglichkeit mehr Speicher zu reservieren? Oder muss ich mir ganz lange Defaults ausdenken?::helau:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...