CRegEntry::operator LPTSTR() { /* If caching is disabled, refresh the entries */ REGENTRY_REFRESH_IF_NOCACHE assert(__bConvertable); // Check for conversion implementation ForceStr(); switch (iType) { case REG_DWORD: _stprintf(lpszStr, _T("%lu"), dwDWORD); break; case REG_MULTI_SZ: GetMulti(lpszStr); break; case REG_BINARY: { _tcsncpy(lpszStr, (const _TCHAR*)&vBytes[0], vBytes.size()); lpszStr[vBytes.size()] = 0; } break; } return lpszStr; }
CRegEntry& CRegEntry::operator=(CRegEntry& cregValue) { if (this == &cregValue) return *this; if (lpszName == NULL) { size_t nNameLen = _tcslen(cregValue.lpszName) + 1; lpszName = new _TCHAR[nNameLen]; _tcsncpy(lpszName, cregValue.lpszName, nNameLen); } switch ((iType = cregValue.iType)) { case REG_SZ: return (*this = (ForceStr(), cregValue.lpszStr)); break; case REG_MULTI_SZ: { LPTSTR lpszBuf = new _TCHAR[_MAX_REG_VALUE]; SetMulti(cregValue.GetMulti(lpszBuf), cregValue.MultiLength()); delete [] lpszBuf; return *this; } break; case REG_BINARY: { size_t n = cregValue.vBytes.size(); LPBYTE buf = new BYTE[n]; cregValue.GetBinary(buf, n); SetBinary(buf, n); delete [] buf; return *this; } break; default: return (*this = cregValue.dwDWORD); } }
CRegEntry& CRegEntry::operator=(LPCTSTR lpszValue) { size_t nValueLen = (_tcslen(lpszValue) + 1)*sizeof(TCHAR); assert(nValueLen <= _MAX_REG_VALUE); ForceStr(); iType = REG_SZ; _tcsncpy(lpszStr, lpszValue, nValueLen > _MAX_REG_VALUE ? _MAX_REG_VALUE : nValueLen); REGENTRY_ALLOWCONV(true) if (REGENTRY_NOTLOADING && REGENTRY_KEYVALID( KEY_SET_VALUE )) RegSetValueEx(__cregOwner->hKey, lpszName, NULL, REG_SZ, (LPBYTE)lpszValue, nValueLen); REGENTRY_TRYCLOSE; __bStored = true; return *this; }