如何使用返回类型CList生成函数并在调用函数中读取该列表?

时间:2014-04-07 05:34:33

标签: mfc

CList Get_StartUp_Programs(CString csRegistryPath)

{

CList<CString,CString> listData;
HKEY hKey;      

        if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,csRegistryPath,0,KEY_ALL_ACCESS | KEY_WOW64_64KEY,&hKey) == ERROR_SUCCESS)
        {       

        DWORD dwValues, dwMaxValueNameLen, dwMaxValueLen;

        LONG lRet = ::RegQueryInfoKey(hKey, 
                          NULL, NULL,    // lpClass, lpcClass
                          NULL,          // lpReserved
                          NULL, NULL,    // lpcSubKeys, lpcMaxSubKeyLen
                          NULL,          // lpcMaxClassLen
                          &dwValues,
                          &dwMaxValueNameLen,
                          &dwMaxValueLen,
                          NULL,          // lpcbSecurityDescriptor
                          NULL);         // lpftLastWriteTime 

        if(ERROR_SUCCESS == lRet)
        {  

            LPTSTR pszName = new TCHAR[dwMaxValueNameLen + 1];
            LPBYTE lpData   = new BYTE[dwMaxValueLen];
            for(DWORD dwIndex = 0; dwIndex < dwValues; dwIndex++)
            {
                DWORD dwNameSize  = dwMaxValueNameLen + 1;
                DWORD dwValueSize = dwMaxValueLen;
                DWORD dwType;
                lRet = ::RegEnumValue(hKey, dwIndex, pszName, &dwNameSize,0, &dwType, lpData, &dwValueSize);
                CString strName = pszName;
                listData.AddHead(strName);                  
            CLog::Log(strName + _T(""));
            }
        delete []pszName;
        delete []lpData;
        }
        }

}

在这个函数中我想要这个函数返回的启动程序列表,以便我可以在调用函数中处理该列表。如何返回启动程序列表

1 个答案:

答案 0 :(得分:2)

CList没有复制构造函数,也没有复制运算符。 所以最简单的方法是传递一个CList对象作为函数的引用。

void FunctionToGetListData(CList<CString,CString> &listData)
{
  listData.RemobveAll();
...

使用列表作为参数调用函数:

CList<CString,CString> listData;
FunctionToGetListData(listData);

或者使用std:list。您可以轻松地从函数返回std :: list。