2011年2月21日 星期一

將 data(struct) 寫到Registry。

1. Set

    HKEY hkFolder;
    DWORD dwDisposition = REG_CREATED_NEW_KEY;

    if(!m_vctNode.empty()) m_vctNode.clear();

    if (ERROR_SUCCESS == ::RegCreateKeyEx(HKEY_CURRENT_USER, REGISTSUBFOLDER, NULL,  _T("NODEITEM"),
                           REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkFolder, &dwDisposition))
    {
        DWORD nSize = vctpNode.size();
        NODEITEM * pNode = new NODEITEM[nSize];
        for(int i=0;i<vctpNode.size();i++)
        {
            m_vctNode.push_back(*(vctpNode[i]));
            pNode[i] = (*(vctpNode[i]));

        }
       
        RegSetValueEx(hkFolder, _T("NODEITEM"), NULL, REG_BINARY, (BYTE*) pNode, nSize * sizeof(NODEITEM));
        delete [] pNode;
    }
    RegCloseKey(hkFolder);

2. Get

    vGetAppCacheFolder();
    HKEY hkFolder;
    DWORD cbData = 0;
    DWORD nType = REG_BINARY;
    bool bResult = false;
   
    NODEITEM *pNode = NULL;
    LONG nRet1 = RegOpenKey(HKEY_CURRENT_USER, REGISTSUBFOLDER, &hkFolder);
    cbData = 0;
    LONG nRet2 = RegQueryValueEx(hkFolder, _T("NODEITEM"), NULL, &nType, (BYTE*)pNode, &cbData);
    DWORD nApplySize = cbData/sizeof(NODEITEM);
    pNode = new NODEITEM[nApplySize];
    memset(pNode, 0, nApplySize);
    nRet2 = RegQueryValueEx(hkFolder, _T("NODEITEM"), NULL, &nType, (BYTE*)pNode, &cbData);

    if ( nRet1 == ERROR_SUCCESS && nRet2  == ERROR_SUCCESS )
    {
        m_vctNode.clear();
        int nSize =  cbData/sizeof(NODEITEM);
        for (int ci=0; ci < nSize; ci++)
        {           
            try{

                m_vctNode.push_back((pNode[ci]));
            }
            catch(exception* e){
                delete e;
                m_vctNode.clear();
                delete [] pNode;
                return false;
            }       
        }

        bResult = true;
    }else
    {
        FORMATMESSAGE(nRet2);
    }
    try
    {
        delete [] pNode;
    }catch(exception* e)
    {
        m_vctNode.clear();
        delete e;
    }
    RegCloseKey(hkFolder);
    return bResult;

沒有留言:

張貼留言