Er. Ich hab folgende Antwort geschrieben bevor mir aufgefallen ist dass du von "Windows CE 5.0" schreibst. Aber egal, wenn ichs schonmal geschrieben habe...
(Weiter unten mehr zum Them Windows CE 5.0)
----
Wie aus der Fehlermeldung hervorgeht, sind deine CString s UTF-16 ( wchar_t bzw. unsigned short ). Und std::string ist dummerweise nicht UTF-16.
Die einfachste Variante zwei solche String zu vergleichen ist den std::string in einen CString zu konvertieren. Das geht nämlich netterweise trotz dem der CString UTF-16 ist, der "narrow" String wird dabei automatisch mit der System-Codepage nach UTF-16 konvertiert.
Wenn du das an mehreren Stellen brauchst, kannst du auch gleich passende operator == definieren:
inline bool operator == (std::string const& a, CString const& b)
{
return CString(a.c_str(), a.size()) == b;
}
inline bool operator == (CString const& a, std::string const& b)
{
return b == a;
}
----
So, nu zum Thema "Windows CE 5.0".
Der Compiler für Windows CE 5.0 ist eMbedded Visual C++ 4.0.
Und wenn die Wikipedia-Seite zur MFC Recht hat, dann ist beim eMbedded Visual C++ 4.0 die MFC Version 6.0 dabei, also die selbe Version wie die von Visual Studio 6.0.
In der gibt es den Konstruktor noch nicht den ich oben verwendet habe ( char* + Länge). Es gibt aber einen Konstruktor der nur einen char* nimmt (d.h. einfach die Länge, also das a.size() weglassen). Das funktioniert dann natürlich nicht mehr korrekt mit Strings die "eingebettete" Null-Characters haben. Da solche Strings aber ziemlich unüblich sind wirst du vielleicht damit leben können.
Die Alternative wäre den String "zu Fuss" nach UTF-16 zu konvertieren. Unter Win32 nimmt man dafür MultiByteToWideChar() . Ob das unter Windows CE 5.0 auch verfügbar ist weiss ich allerdings nicht.