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;
}
}