Mfc 如何使函数具有返回类型CList并在调用函数时读取该列表?

Mfc 如何使函数具有返回类型CList并在调用函数时读取该列表?,mfc,Mfc,{ CList-listData; HKEY HKEY; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,csRegistryPath,0,KEY_ALL_ACCESS | KEY_WOW64_64KEY,&HKEY)=错误_成功) { DWORD dwValues、dwMaxValueNameLen、dwMaxValueLen; 长lRet=::RegQueryInfoKey(hKey, NULL,NULL,//lpClass,lpccclass NULL,

{

CList-listData;
HKEY HKEY;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,csRegistryPath,0,KEY_ALL_ACCESS | KEY_WOW64_64KEY,&HKEY)=错误_成功)
{       
DWORD dwValues、dwMaxValueNameLen、dwMaxValueLen;
长lRet=::RegQueryInfoKey(hKey,
NULL,NULL,//lpClass,lpccclass
NULL,//lpReserved
NULL,NULL,//lpcSubKeys,lpcMaxSubKeyLen
NULL,//lpcmaxlasslen
&DWV值,
&dwMaxValueNameLen,
&dwMaxValueLen,
NULL,//lpcbSecurityDescriptor
NULL);//lpftLastWriteTime
如果(错误\成功==lRet)
{  
LPTSTR pszName=new TCHAR[dwMaxValueNameLen+1];
LPBYTE lpData=新字节[dwMaxValueLen];
对于(DWORD dwIndex=0;dwIndex
}


在这个函数中,我需要这个函数返回的启动程序列表,以便我可以在调用函数中处理这个列表。如何返回启动程序列表?CList没有复制构造函数和复制运算符。 因此,最简单的方法是传递CList对象作为对函数的引用

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;
        }
        }
void函数togetListData(CList&listData)
{
listData.RemobveAll();
...
仅在使用列表作为参数时调用函数:

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

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

CList没有复制构造函数和复制运算符。
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;
        }
        }
因此,最简单的方法是传递CList对象作为对函数的引用

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;
        }
        }
void函数togetListData(CList&listData)
{
listData.RemobveAll();
...
仅在使用列表作为参数时调用函数:

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

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

CList没有复制构造函数和复制运算符。
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;
        }
        }
因此,最简单的方法是传递CList对象作为对函数的引用

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;
        }
        }
void函数togetListData(CList&listData)
{
listData.RemobveAll();
...
仅在使用列表作为参数时调用函数:

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

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

CList没有复制构造函数和复制运算符。
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;
        }
        }
因此,最简单的方法是传递CList对象作为对函数的引用

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;
        }
        }
void函数togetListData(CList&listData)
{
listData.RemobveAll();
...
仅在使用列表作为参数时调用函数:

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

或者使用std:list。您可以很容易地从函数返回std::list。

我可以这样做,但它会抛出错误------CList listStartUp;listStartUp=Get_StartUp_程序(csaStartUpProgram[nStartupProgram]);我可以这样做,但它会抛出错误------CList listStartUp;listStartUp=Get_StartUp_程序(csaStartUpProgram[nStartupProgram]);我可以这样做但它抛出错误------CList listStartUp;listStartUp=Get_StartUp_程序(csaStartUpProgram[nStartupProgram]);我可以这样做但它抛出错误------CList listStartUp;listStartUp=Get_StartUp_程序(csaStartUpProgram[nStartupProgram]);
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;
        }
        }