#include #include #include #include #include #include #include #include BOOL wcs2ansi( const wchar_t *pwsz, char *psz, DWORD pszlen ) { BOOL rc; int len; assert(psz && pwsz); len = wcslen(pwsz); if (!len) { *psz = 0; return TRUE; } rc = WideCharToMultiByte(CP_ACP, WC_SEPCHARS | WC_COMPOSITECHECK, pwsz, len, psz, pszlen, NULL, NULL); if (!rc) return FALSE; psz[len] = 0; return TRUE; } BOOL ansi2wcs( const char *psz, wchar_t *pwsz, DWORD pwszlen ) { BOOL rc; int len; assert(psz && pwsz); len = strlen(psz); if (!len) { *pwsz = 0L; return TRUE; } rc = MultiByteToWideChar(CP_ACP, MB_COMPOSITE, psz, len, pwsz, pwszlen); if (!rc) return FALSE; pwsz[len] = 0; return TRUE; } BOOL tchar2ansi( const TCHAR *tsz, char *psz, DWORD pszlen ) { #ifdef UNICODE return wcs2ansi(tsz, psz, pszlen); #else strcpy(psz, tsz); return true; #endif } BOOL ansi2tchar( const char *psz, TCHAR *tsz, DWORD tszlen ) { #ifdef UNICODE return ansi2wcs(psz, tsz, tszlen); #else strcpy(tsz, psz); return true; #endif } void EnsureTrailingBackslash(TCHAR *sz) { int i; assert(sz); i = _tcslen(sz); if (!i) return; if (sz[i - 1] == TEXT('\\')) return; sz[i] = TEXT('\\'); sz[i + 1] = TEXT('\0'); } void RemoveTrailingBackslash(TCHAR *sz) { int i; assert(sz); i = _tcslen(sz); if (!i) return; if (sz[i - 1] == TEXT('\\')) sz[i] = TEXT('\0'); } void getpath(TCHAR *fullpath, TCHAR *path, DWORD size) { static TCHAR drive[SZ_SIZE]; static TCHAR dir[SZ_SIZE]; assert(fullpath && *fullpath && path); _tsplitpath(fullpath, drive, dir, NULL, NULL); StringCchCopy(path, size, drive); StringCchCat(path, size, dir); path += _tcslen(path) - 1; if (*path == TEXT('\\')) *path = TEXT('\0'); }