blob: 07b0f58e301b79d5709d70244d6155d0b6dc0ad8 [file] [log] [blame]
#pragma once
//-------------------------------------------------------------------------------------------------
// <copyright file="strutil.h" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// The use and distribution terms for this software are covered by the
// Common Public License 1.0 (http://opensource.org/licenses/cpl1.0.php)
// which can be found in the file CPL.TXT at the root of this distribution.
// By using this software in any fashion, you are agreeing to be bound by
// the terms of this license.
//
// You must not remove this notice, or any other, from this software.
// </copyright>
//
// <summary>
// Header for string helper functions.
// </summary>
//-------------------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
#define ReleaseStr(pwz) if (pwz) { StrFree(pwz); }
#define ReleaseNullStr(pwz) if (pwz) { StrFree(pwz); pwz = NULL; }
#define ReleaseBSTR(bstr) if (bstr) { ::SysFreeString(bstr); }
#define ReleaseNullBSTR(bstr) if (bstr) { ::SysFreeString(bstr); bstr = NULL; }
#define ReleaseNullStrArray(rg, c) { if (rg) { StrArrayFree(rg, c); c = 0; rg = NULL; } }
#define DeclareConstBSTR(bstr_const, wz) const WCHAR bstr_const[] = { 0x00, 0x00, sizeof(wz)-sizeof(WCHAR), 0x00, wz }
#define UseConstBSTR(bstr_const) const_cast<BSTR>(bstr_const + 4)
HRESULT DAPI StrAlloc(
__deref_out_ecount_part(cch, 0) LPWSTR* ppwz,
__in DWORD_PTR cch
);
HRESULT DAPI StrTrimCapacity(
__deref_out LPWSTR* ppwz
);
HRESULT DAPI StrAnsiAlloc(
__deref_out_ecount_part(cch, 0) LPSTR* ppz,
__in DWORD_PTR cch
);
HRESULT DAPI StrAnsiTrimCapacity(
__deref_out LPSTR* ppz
);
HRESULT DAPI StrAllocString(
__deref_out_ecount_z(cchSource+1) LPWSTR* ppwz,
__in_z LPCWSTR wzSource,
__in DWORD_PTR cchSource
);
HRESULT DAPI StrAnsiAllocString(
__deref_out_ecount_z(cchSource+1) LPSTR* ppsz,
__in_z LPCWSTR wzSource,
__in DWORD_PTR cchSource,
__in UINT uiCodepage
);
HRESULT DAPI StrAllocStringAnsi(
__deref_out_ecount_z(cchSource+1) LPWSTR* ppwz,
__in_z LPCSTR szSource,
__in DWORD_PTR cchSource,
__in UINT uiCodepage
);
HRESULT DAPI StrAllocPrefix(
__deref_out_z LPWSTR* ppwz,
__in_z LPCWSTR wzPrefix,
__in DWORD_PTR cchPrefix
);
HRESULT DAPI StrAllocConcat(
__deref_out_z LPWSTR* ppwz,
__in_z LPCWSTR wzSource,
__in DWORD_PTR cchSource
);
HRESULT DAPI StrAnsiAllocConcat(
__deref_out_z LPSTR* ppz,
__in_z LPCSTR pzSource,
__in DWORD_PTR cchSource
);
HRESULT __cdecl StrAllocFormatted(
__deref_out_z LPWSTR* ppwz,
__in __format_string LPCWSTR wzFormat,
...
);
HRESULT __cdecl StrAnsiAllocFormatted(
__deref_out_z LPSTR* ppsz,
__in __format_string LPCSTR szFormat,
...
);
HRESULT DAPI StrAllocFormattedArgs(
__deref_out_z LPWSTR* ppwz,
__in __format_string LPCWSTR wzFormat,
__in va_list args
);
HRESULT DAPI StrAnsiAllocFormattedArgs(
__deref_out_z LPSTR* ppsz,
__in __format_string LPCSTR szFormat,
__in va_list args
);
HRESULT DAPI StrAllocFromError(
__inout LPWSTR *ppwzMessage,
__in HRESULT hrError,
__in_opt HMODULE hModule,
...
);
HRESULT DAPI StrMaxLength(
__in LPCVOID p,
__out DWORD_PTR* pcch
);
HRESULT DAPI StrSize(
__in LPCVOID p,
__out DWORD_PTR* pcb
);
HRESULT DAPI StrFree(
__in LPVOID p
);
HRESULT DAPI StrCurrentTime(
__deref_out_z LPWSTR* ppwz,
__in BOOL fGMT
);
HRESULT DAPI StrCurrentDateTime(
__deref_out_z LPWSTR* ppwz,
__in BOOL fGMT
);
HRESULT DAPI StrReplaceStringAll(
__inout LPWSTR* ppwzOriginal,
__in_z LPCWSTR wzOldSubString,
__in_z LPCWSTR wzNewSubString
);
HRESULT DAPI StrReplaceString(
__inout LPWSTR* ppwzOriginal,
__inout DWORD* pdwStartIndex,
__in_z LPCWSTR wzOldSubString,
__in_z LPCWSTR wzNewSubString
);
HRESULT DAPI StrHexEncode(
__in_ecount(cbSource) const BYTE* pbSource,
__in DWORD_PTR cbSource,
__out_ecount(cchDest) LPWSTR wzDest,
__in DWORD_PTR cchDest
);
HRESULT DAPI StrHexDecode(
__in_z LPCWSTR wzSource,
__out_bcount(cbDest) BYTE* pbDest,
__in DWORD_PTR cbDest
);
HRESULT DAPI StrAllocBase85Encode(
__in_bcount(cbSource) const BYTE* pbSource,
__in DWORD_PTR cbSource,
__deref_out_z LPWSTR* pwzDest
);
HRESULT DAPI StrAllocBase85Decode(
__in_z LPCWSTR wzSource,
__deref_out_bcount(*pcbDest) BYTE** hbDest,
__out DWORD_PTR* pcbDest
);
HRESULT DAPI MultiSzLen(
__in_z LPCWSTR pwzMultiSz,
__out DWORD_PTR* pcch
);
HRESULT DAPI MultiSzPrepend(
__deref_inout_z LPWSTR* ppwzMultiSz,
__inout_opt DWORD_PTR *pcchMultiSz,
__in_z LPCWSTR pwzInsert
);
HRESULT DAPI MultiSzFindSubstring(
__in_z LPCWSTR pwzMultiSz,
__in_z LPCWSTR pwzSubstring,
__out_opt DWORD_PTR* pdwIndex,
__deref_opt_out_z LPCWSTR* ppwzFoundIn
);
HRESULT DAPI MultiSzFindString(
__in_z LPCWSTR pwzMultiSz,
__in_z LPCWSTR pwzString,
__out_opt DWORD_PTR* pdwIndex,
__deref_opt_out_z LPCWSTR* ppwzFound
);
HRESULT DAPI MultiSzRemoveString(
__deref_inout_z LPWSTR* ppwzMultiSz,
__in DWORD_PTR dwIndex
);
HRESULT DAPI MultiSzInsertString(
__deref_inout_z LPWSTR* ppwzMultiSz,
__inout_opt DWORD_PTR *pcchMultiSz,
__in DWORD_PTR dwIndex,
__in_z LPCWSTR pwzInsert
);
HRESULT DAPI MultiSzReplaceString(
__deref_inout_z LPWSTR* ppwzMultiSz,
__in DWORD_PTR dwIndex,
__in_z LPCWSTR pwzString
);
LPCWSTR wcsistr(
__in_z LPCWSTR wzString,
__in_z LPCWSTR wzCharSet
);
HRESULT DAPI StrStringToInt16(
__in_z LPCWSTR wzIn,
__in DWORD cchIn,
__out SHORT* psOut
);
HRESULT DAPI StrStringToUInt16(
__in_z LPCWSTR wzIn,
__in DWORD cchIn,
__out USHORT* pusOut
);
HRESULT DAPI StrStringToInt32(
__in_z LPCWSTR wzIn,
__in DWORD cchIn,
__out INT* piOut
);
HRESULT DAPI StrStringToUInt32(
__in_z LPCWSTR wzIn,
__in DWORD cchIn,
__out UINT* puiOut
);
HRESULT DAPI StrStringToInt64(
__in_z LPCWSTR wzIn,
__in DWORD cchIn,
__out LONGLONG* pllOut
);
HRESULT DAPI StrStringToUInt64(
__in_z LPCWSTR wzIn,
__in DWORD cchIn,
__out ULONGLONG* pullOut
);
void DAPI StrStringToUpper(
__inout_z LPWSTR wzIn
);
void DAPI StrStringToLower(
__inout_z LPWSTR wzIn
);
HRESULT DAPI StrArrayAllocString(
__deref_inout_ecount(*pcStrArray) LPWSTR **prgsczStrArray,
__inout LPUINT pcStrArray,
__in_z LPCWSTR wzSource,
__in DWORD_PTR cchSource
);
HRESULT DAPI StrArrayFree(
__in_ecount(cStrArray) LPWSTR *rgsczStrArray,
__in UINT cStrArray
);
#ifdef __cplusplus
}
#endif