[ATL] Add CString.AllocSysString
authorMark Jansen <mark.jansen@reactos.org>
Sun, 24 Dec 2017 00:28:16 +0000 (01:28 +0100)
committerMark Jansen <mark.jansen@reactos.org>
Mon, 25 Dec 2017 13:00:51 +0000 (14:00 +0100)
sdk/lib/atl/cstringt.h

index b758514..5d278c5 100644 (file)
@@ -143,6 +143,12 @@ public:
         return ::vswprintf(pszDest, pszFormat, args);
     }
 
+    static BSTR __cdecl AllocSysString(
+        _In_z_ LPCWSTR pszSource,
+        _In_ int nLength)
+    {
+        return ::SysAllocStringLen(pszSource, nLength);
+    }
 };
 
 
@@ -269,6 +275,19 @@ public:
         return ::vsprintf(pszDest, pszFormat, args);
     }
 
+    static BSTR __cdecl AllocSysString(
+        _In_z_ LPCSTR pszSource,
+        _In_ int nLength)
+    {
+        int nLen = ChTraitsCRT<wchar_t>::GetBaseTypeLength(pszSource, nLength);
+        BSTR bstr = ::SysAllocStringLen(NULL, nLen);
+        if (bstr)
+        {
+            ChTraitsCRT<wchar_t>::ConvertToBaseType(bstr, nLen, pszSource, nLength);
+        }
+        return bstr;
+    }
+
 };
 
 
@@ -797,8 +816,14 @@ public:
     }
 
 
+    BSTR AllocSysString() const
+    {
+        return StringTraits::AllocSysString(CThisSimpleString::GetString(), CThisSimpleString::GetLength());
+    }
+
+
 };
 
 } //namespace ATL
 
-#endif
\ No newline at end of file
+#endif