Fehler mit einer Klasse
-
Hi, ich habe versucht mit MS Vc++ 2005 diese Klasse zu benützen
http://www.codeproject.com/useritems/IniReader.asp
, aber bekomme immer den Fehler:1>.\IniWriter.cpp(13) : error C2664: 'WritePrivateProfileStringW': Konvertierung des Parameters 1 von 'char *' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.Und den dann gleich 8 mal. Kann mir bitte jemand weiterhelfen?
-
In den Projekteinstellungen nicht UNICODE sondern MBCS auswählen.
Grüsse
*this
-
ausgezeichnet, danke
. Noch eine Frage: Inwieweit kann das negative Auswirkungen auf mein restliches Programm haben?
-
lalalala schrieb:
ausgezeichnet, danke
. Noch eine Frage: Inwieweit kann das negative Auswirkungen auf mein restliches Programm haben?Das kann ich Dir so nicht sagen.
Man könnte auch das Codeschipsel auf UNICODE migrieren (was ich tun würde); aber das zu erklären führt hier deutlich zu weit.
Grüsse
*this
-
Ok , danke. Nur noch eine Frage : Woran hast du das Problem erkannt / gewusst wie man das löst?
-
Anhand der Fehlermeldung?

Es gibt von den WinAPI-Funktionen je eine Ansi- und Widestring-Version. Das W-Suffix bei den WinAPI-Funktionen steht für "Wide". Und in ein char* passt ein Wide-String eher nicht rein.
-
klingt sogar in meinen Ohren vernünftig
.
Na dann, danke .
-
lalalala schrieb:
Ok , danke. Nur noch eine Frage : Woran hast du das Problem erkannt / gewusst wie man das löst?
An dem W in
WritePrivateProfileString[b]W[/b] LPC[b]W[/b]STRDas steht für "wide" oder "wchar_t".
Grüsse
*this
P.S.: Wenn Du doch UNICODE verwenden willst solltest Du
- TCHAR statt char*
- _T("Hello World") statt "Hello World"
_ _tmain statt main
- und _tprintf statt printf usw..
- std::wcout statt std::cout
- std::wstring statt std::string
- std::wifstream statt std::ifstreamverwenden. Am besten Du machst Dir eine
//My.hpp //... #include <iostream> #include <string> namespace My { #ifdef _UNICODE typedef std::wstring string; typedef std::wostream ostream; //... #else typedef std::string string; typedef std::ostream ostream; //... #endif extern ostream& cout; //... } // namespace My // un deine kleine My.cpp #include "My.hpp" #include <iostream> namespace My { #ifdef _UNICODE ostream& cout = std::wcout; //... #else ostream& cout = std::cout; //... #endif } // namespace My // EOFund verwendest nicht
using namespace std;sondern dann sowas
My::cout << _T("Hello World") << std::endl;
-
Super, nochmals danke für deine Extramühe
.
-
oder du definierst dir nen eigenen string ...
namespace std { typedef basic_string<TCHAR> tstring; };