c14eccc20a43f7c39a6fa10ec1468233963ea864
5 #include <atlsimpstr.h>
14 inline UINT WINAPI
_AtlGetConversionACP() throw()
16 #ifdef _CONVERSION_DONT_USE_THREAD_LOCALE
24 template<typename _CharType
= wchar_t>
25 class ChTraitsCRT
: public ChTraitsBase
<_CharType
>
29 static int __cdecl
GetBaseTypeLength(_In_z_ LPCWSTR pszSource
) throw()
31 return ::WideCharToMultiByte(_AtlGetConversionACP(), 0, pszSource
, -1, NULL
, 0, NULL
, NULL
) - 1;
34 static int __cdecl
GetBaseTypeLength(
35 _In_reads_(nLength
) LPCWSTR pszSource
,
36 _In_
int nLength
) throw()
38 return ::WideCharToMultiByte(_AtlGetConversionACP(), 0, pszSource
, nLength
, NULL
, 0, NULL
, NULL
);
41 static void __cdecl
ConvertToBaseType(
42 _Out_writes_(nDestLength
) LPWSTR pszDest
,
45 _In_
int nSrcLength
= -1)
48 nSrcLength
= 1 + GetBaseTypeLength(pszSrc
);
50 wmemcpy(pszDest
, pszSrc
, nSrcLength
);
56 namespace _CSTRING_IMPL_
58 template <typename _CharType
, class StringTraits
>
59 struct _MFCDLLTraitsCheck
61 const static bool c_bIsMFCDLLTraits
= false;
66 template <typename BaseType
, class StringTraits
>
68 public CSimpleStringT
<BaseType
, _CSTRING_IMPL_::_MFCDLLTraitsCheck
<BaseType
, StringTraits
>::c_bIsMFCDLLTraits
>
71 typedef CSimpleStringT
<BaseType
, _CSTRING_IMPL_::_MFCDLLTraitsCheck
<BaseType
, StringTraits
>::c_bIsMFCDLLTraits
> CThisSimpleString
;
72 typedef StringTraits StrTraits
;
73 typedef typename
CThisSimpleString::XCHAR XCHAR
;
74 typedef typename
CThisSimpleString::PXSTR PXSTR
;
75 typedef typename
CThisSimpleString::PCXSTR PCXSTR
;
76 typedef typename
CThisSimpleString::YCHAR YCHAR
;
77 typedef typename
CThisSimpleString::PYSTR PYSTR
;
78 typedef typename
CThisSimpleString::PCYSTR PCYSTR
;
82 CThisSimpleString(StringTraits::GetDefaultManager())
86 explicit CStringT( _In_ IAtlStringMgr
* pStringMgr
) throw() :
87 CThisSimpleString(pStringMgr
)
91 static void __cdecl
Construct(_In_ CStringT
* pString
)
93 pString
= new CStringT
;
96 CStringT(_In_
const CStringT
& strSrc
) :
97 CThisSimpleString(strSrc
)
101 CStringT(_In_opt_z_
const XCHAR
* pszSrc
) :
102 CThisSimpleString( StringTraits::GetDefaultManager() )
104 // FIXME: Check whether pszSrc is not a resource string ID!
109 _In_opt_z_
const XCHAR
* pszSrc
,
110 _In_ IAtlStringMgr
* pStringMgr
) :
111 CThisSimpleString( pStringMgr
)
113 // FIXME: Check whether pszSrc is not a resource string ID!
117 CStringT
& operator=(_In_
const CStringT
& strSrc
)
119 CThisSimpleString::operator=(strSrc
);
123 CStringT
& operator=(_In_opt_z_ PCXSTR pszSrc
)
125 CThisSimpleString::operator=(pszSrc
);
129 CStringT
& operator+=(_In_
const CThisSimpleString
& str
)
131 CThisSimpleString::operator+=(str
);
135 CStringT
& operator+=(_In_z_ PCXSTR pszSrc
)
137 CThisSimpleString::operator+=(pszSrc
);
141 _Check_return_ BOOL
LoadString(_In_ HINSTANCE hInstance
,
144 const ATLSTRINGRESOURCEIMAGE
* pImage
= AtlGetStringResourceImage(hInstance
, nID
);
145 if (pImage
== NULL
) return FALSE
;
147 int nLength
= StringTraits::GetBaseTypeLength(pImage
->achString
, pImage
->nLength
);
148 PXSTR pszBuffer
= CThisSimpleString::GetBuffer(nLength
);
149 StringTraits::ConvertToBaseType(pszBuffer
, nLength
, pImage
->achString
, pImage
->nLength
);
150 CThisSimpleString::ReleaseBufferSetLength(nLength
);