@@ -986,6 +986,50 @@ void WINAPI FreeStringBuffer(LPWSTR lpbuf)
986986
987987// ///////////////////////////////////////////////////////////////////////////
988988
989+ void __stdcall _FormatStringA (LPWSTR& lpszData, LPCSTR lpszFormat, va_list va, UINT uCodePage = CP_ACP)
990+ {
991+ int n, nRet;
992+ LPSTR lp;
993+
994+ n = 255 ;
995+ lp = (LPSTR)malloc (sizeof (CHAR) * 255 );
996+ nRet = _vsnprintf (lp, n, lpszFormat, va);
997+ while (nRet < 0 )
998+ {
999+ n += 255 ;
1000+ lp = (LPSTR)realloc (lp, sizeof (CHAR) * n);
1001+ nRet = _vsnprintf (lp, n, lpszFormat, va);
1002+ }
1003+ if (lpszData)
1004+ lpszData = ReAllocStringLenA (lpszData, lp, nRet, uCodePage);
1005+ else
1006+ lpszData = AllocStringLenA (lp, nRet, uCodePage);
1007+ free (lp);
1008+ }
1009+
1010+ void __stdcall _FormatStringW (LPWSTR& lpszData, LPCWSTR lpszFormat, va_list va)
1011+ {
1012+ int n, nRet;
1013+ LPWSTR lp;
1014+
1015+ n = 255 ;
1016+ lp = (LPWSTR)malloc (sizeof (WCHAR) * 255 );
1017+ nRet = _vsnwprintf (lp, n, lpszFormat, va);
1018+ while (nRet < 0 )
1019+ {
1020+ n += 255 ;
1021+ lp = (LPWSTR)realloc (lp, sizeof (WCHAR) * n);
1022+ nRet = _vsnwprintf (lp, n, lpszFormat, va);
1023+ }
1024+ if (lpszData)
1025+ lpszData = ReAllocStringLen (lpszData, lp, nRet);
1026+ else
1027+ lpszData = AllocStringLen (lp, nRet);
1028+ free (lp);
1029+ }
1030+
1031+ // ///////////////////////////////////////////////////////////////////////////
1032+
9891033CMyStringW::CMyStringW ()
9901034 : m_lpszData(NULL ), m_lpszLast(NULL ), m_uCodePage(CP_ACP)
9911035{
@@ -1023,8 +1067,16 @@ CMyStringW::CMyStringW(LPCUWSTR lpszString)
10231067}
10241068#endif
10251069
1070+ #ifndef NO_LOADSTRING
1071+ CMyStringW::CMyStringW (UINT uID)
1072+ : m_lpszData(NULL ), m_lpszLast(NULL ), m_uCodePage(CP_ACP)
1073+ {
1074+ LoadString (uID);
1075+ }
1076+ #endif
1077+
10261078CMyStringW::CMyStringW (LPCSTR lpszString, UINT uCodePage)
1027- : m_lpszData(NULL ), m_lpszLast(NULL )
1079+ : m_lpszData(NULL ), m_lpszLast(NULL ), m_uCodePage(uCodePage)
10281080{
10291081#ifndef NO_LOADSTRING
10301082 if (HIWORD (lpszString))
@@ -1079,6 +1131,48 @@ CMyStringW::CMyStringW(char ch, size_t nCount, UINT uCodePage)
10791131 m_lpszData = NULL ;
10801132}
10811133
1134+ WINAPIV CMyStringW::CMyStringW (_ConstructorWithVarArg, LPCWSTR lpszString, ...)
1135+ : m_lpszData(NULL ), m_lpszLast(NULL ), m_uCodePage(CP_ACP)
1136+ {
1137+ va_list va;
1138+ va_start (va, lpszString);
1139+ _FormatStringW (m_lpszData, lpszString, va);
1140+ va_end (va);
1141+ }
1142+
1143+ WINAPIV CMyStringW::CMyStringW (_ConstructorWithVarArg, LPCSTR lpszString, ...)
1144+ : m_lpszData(NULL ), m_lpszLast(NULL ), m_uCodePage(CP_ACP)
1145+ {
1146+ va_list va;
1147+ va_start (va, lpszString);
1148+ _FormatStringA (m_lpszData, lpszString, va);
1149+ va_end (va);
1150+ }
1151+
1152+ #ifdef ALIGNMENT_MACHINE
1153+ WINAPIV CMyStringW::CMyStringW (_ConstructorWithVarArg, LPCUWSTR lpszString, ...)
1154+ : m_lpszData(NULL ), m_lpszLast(NULL ), m_uCodePage(CP_ACP)
1155+ {
1156+ CMyStringW str (lpszString);
1157+ va_list va;
1158+ va_start (va, lpszString);
1159+ _FormatStringW (m_lpszData, str, va);
1160+ va_end (va);
1161+ }
1162+ #endif
1163+
1164+ #ifndef NO_LOADSTRING
1165+ WINAPIV CMyStringW::CMyStringW (_ConstructorWithVarArg, UINT uID, ...)
1166+ : m_lpszData(NULL ), m_lpszLast(NULL ), m_uCodePage(CP_ACP)
1167+ {
1168+ CMyStringW str (MAKEINTRESOURCE (uID));
1169+ va_list va;
1170+ va_start (va, uID);
1171+ _FormatStringW (m_lpszData, str, va);
1172+ va_end (va);
1173+ }
1174+ #endif
1175+
10821176const CMyStringW& CMyStringW::operator = (LPCWSTR lpszString)
10831177{
10841178 Empty ();
@@ -1858,48 +1952,6 @@ bool CMyStringW::DeleteString(size_t uStart, size_t uLength)
18581952
18591953// ///////////////////////////////////////////////////////////////////////////
18601954
1861- void __stdcall _FormatStringA (LPWSTR& lpszData, LPCSTR lpszFormat, va_list va, UINT uCodePage = CP_ACP)
1862- {
1863- int n, nRet;
1864- LPSTR lp;
1865-
1866- n = 255 ;
1867- lp = (LPSTR) malloc (sizeof (CHAR) * 255 );
1868- nRet = _vsnprintf (lp, n, lpszFormat, va);
1869- while (nRet < 0 )
1870- {
1871- n += 255 ;
1872- lp = (LPSTR) realloc (lp, sizeof (CHAR) * n);
1873- nRet = _vsnprintf (lp, n, lpszFormat, va);
1874- }
1875- if (lpszData)
1876- lpszData = ReAllocStringLenA (lpszData, lp, nRet, uCodePage);
1877- else
1878- lpszData = AllocStringLenA (lp, nRet, uCodePage);
1879- free (lp);
1880- }
1881-
1882- void __stdcall _FormatStringW (LPWSTR& lpszData, LPCWSTR lpszFormat, va_list va)
1883- {
1884- int n, nRet;
1885- LPWSTR lp;
1886-
1887- n = 255 ;
1888- lp = (LPWSTR) malloc (sizeof (WCHAR) * 255 );
1889- nRet = _vsnwprintf (lp, n, lpszFormat, va);
1890- while (nRet < 0 )
1891- {
1892- n += 255 ;
1893- lp = (LPWSTR) realloc (lp, sizeof (WCHAR) * n);
1894- nRet = _vsnwprintf (lp, n, lpszFormat, va);
1895- }
1896- if (lpszData)
1897- lpszData = ReAllocStringLen (lpszData, lp, nRet);
1898- else
1899- lpszData = AllocStringLen (lp, nRet);
1900- free (lp);
1901- }
1902-
19031955BOOL WINAPIV CMyStringW::Format (LPCSTR lpszString, ...)
19041956{
19051957 va_list va;
0 commit comments