HRESULT CTCPropBagOnRegKey::_ReadVariantFromValue(CRegKey& key, const _bstr_t& strPropName, DWORD nType, int cbData, CComVariant& v, IErrorLog* pErrorLog) { // Read the value from the registry based on the value type switch (nType) { case REG_DWORD: { key.GetDWord(strPropName, (DWORD&)V_UI4(&v)); v.vt = VT_UI4; break; } case REG_SZ: { _bstr_t strValue; key.GetString(strPropName, strValue); v = strValue; break; } case REG_BINARY: { BYTE* pData = new BYTE[cbData]; key.GetBinary(strPropName, pData, cbData); CMemFile file(pData, cbData); CArchive ar(&file, CArchive::load, 0); ar >> v; ar.Close(); delete [] file.Detach(); break; } default: { // Use local resources MCLibRes res; // Format a description string _bstr_t strDesc; strDesc.Format(IDS_FMT_UNSUPPORTED_REGTYPE, nType); // Log the error USES_CONVERSION; return LogError("ReadVariantFromValue", strDesc, E_FAIL, T2COLE(strPropName), pErrorLog); } } // Indicate success return S_OK; }