#ifndef UNICODE //FIXME Build without UNICODE flag #define _AtlGetConversionACP() CP_THREAD_ACP #endif #include "MString.h" typedef CMStringA astring; typedef CMStringW wstring; class mbstring : public astring { // It is prohibited to initialize by char* outside, use L"xxx" private: mbstring(const char * pChar) : astring(pChar) {}; mbstring& operator=(const char * pChar) { this->operator =(pChar); return *this; } public: mbstring() : astring() {}; mbstring(const mbstring& uStr) : astring(uStr) {}; mbstring(const wstring& tStr) { *this = tStr.c_str(); } mbstring& operator=(const wstring& tStr) { this->operator =(tStr.c_str()); return *this; } mbstring(const wchar_t * wChar); mbstring& operator=(const astring& aStr); mbstring& operator=(const wchar_t * wChar); operator wstring(); operator astring(); }; class tstring : public wstring { public: tstring() : wstring() {}; tstring(const wchar_t * pwChar) : wstring(pwChar) {}; tstring(const astring& aStr) { *this = aStr.c_str(); } tstring(const mbstring& utfStr) { *this = utfStr; } tstring(const char * pChar); tstring& operator=(const char * pChar); tstring& operator=(const astring& aStr); tstring& operator=(const mbstring& uStr); operator astring(); operator mbstring() { return mbstring(this->c_str()); } };