// ShutdownData.cpp: implementation of the CPropertyBagImpl class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "CmptData.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CPropertyBag::CPropertyBag() { m_pBag = NULL; } CPropertyBag::~CPropertyBag() { m_pBag = NULL; } HRESULT CPropertyBag::Initialize(IUnknown * pUnk) { if(pUnk == NULL) { if(m_pBag != NULL) { m_pBag->Release(); m_pBag = NULL; return S_OK; } else return E_UNEXPECTED; } HRESULT hr; hr = pUnk->QueryInterface(IID_IPropertyBag, (void**) &m_pBag); if(FAILED(hr)) m_pBag = NULL; return hr; } HRESULT CPropertyBag::Initialize(int cUnks, IUnknown** ppUnks) { HRESULT hr = S_FALSE; for (UINT i = 0; i < cUnks; i++) { hr = Initialize(ppUnks[i]); if(SUCCEEDED(hr)) return hr; } return hr; } int CPropertyBag::GetInt(const string& sKeyName, int nDefault) const { if(m_pBag == NULL) return nDefault; CComVariant var; if(SUCCEEDED(m_pBag->Read(CComBSTR(sKeyName), &var, NULL))) { if(var.vt == VT_I4) { return var.lVal; } else return nDefault; } else { return nDefault; } } string CPropertyBag::GetString(const string& sKeyName, const string& sDefault) const { USES_CONVERSION; if(m_pBag == NULL) return sDefault; CComVariant var; string sRet; if(SUCCEEDED(m_pBag->Read(CComBSTR(sKeyName), &var, NULL))) { if(var.vt == VT_BSTR) { sRet = OLE2T(var.bstrVal); return sRet; } else return sDefault; } else { return sDefault; } } HRESULT CPropertyBag::WriteInt(const string& sKeyName, int nValue) { if(m_pBag == NULL) return E_POINTER; CComVariant var; var.vt = VT_I4; var.lVal = nValue; return m_pBag->Write(CComBSTR(sKeyName), &var); } HRESULT CPropertyBag::WriteString(const string& sKeyName, const string& sValue) { if(m_pBag == NULL) return E_POINTER; CComVariant var; CComBSTR bsVal(sValue); var.vt = VT_BSTR; var.bstrVal = bsVal; return m_pBag->Write(CComBSTR(sKeyName), &var); } HRESULT CPropertyBag::DeleteProperty(const string& sKeyName) { if(m_pBag == NULL) return E_POINTER; CComVariant var; var.Clear(); return m_pBag->Write(CComBSTR(sKeyName), &var); } UINT CPropertyBag::GetStringSet(const string& sFormat, string_array& asData) const { UINT nCnt = 0; string sVal; string sKeyName; // Format Key Name sKeyName.format(sFormat, nCnt++); // Add URLs to List Box while((sVal = GetString(sKeyName, NS_NO_KEY)) != NS_NO_KEY) { asData.push_back(sVal); // Format Key Name sKeyName.format(sFormat, nCnt++); } return --nCnt; } UINT CPropertyBag::WriteStringSet(const string& sFormat, const string_array& asData) { UINT nCnt = 0; // Number of URLs from Registry string sKeyName; string_array::const_iterator iter = asData.begin(); for(; iter != asData.end(); iter++) { sKeyName.format(sFormat, nCnt++); WriteString(sKeyName, *iter); } UINT nRet = nCnt - 1; sKeyName.format(sFormat, nCnt++); CComVariant var; while(SUCCEEDED(m_pBag->Read(CComBSTR(sKeyName), &var, NULL)) && var.vt != VT_EMPTY && var.vt != VT_NULL) { // Format Registry Key DeleteProperty(sKeyName); sKeyName.format(sFormat, nCnt++); var.Clear(); } return nRet; }