DWORD и неподписанный int - PullRequest
       1

DWORD и неподписанный int

0 голосов
/ 02 октября 2011

Я получаю эту ошибку и не могу исправить ее.Любая помощь приветствуется.Благодарю.ошибка C2440: '=': невозможно преобразовать из 'DWORD *' в 'unsigned int' IntelliSense: значение типа "DWORD *" нельзя присвоить объекту типа "unsigned int"

using namespace std;
typedef vector<WIN32_FIND_DATA> tFoundFilesVector;
std::wstring LastWriteTime;  
int getFileList(wstring filespec, tFoundFilesVector &foundFiles)
{
WIN32_FIND_DATA findData;
HANDLE h;
int validResult=true;

int numFoundFiles = 0;
h = FindFirstFile(filespec.c_str(), &findData);

if (h == INVALID_HANDLE_VALUE)
    return 0;

while (validResult)
{
    numFoundFiles++;
    foundFiles.push_back(findData);
    validResult = FindNextFile(h, &findData);
}
return numFoundFiles;
}

void showFileAge(tFoundFilesVector &fileList)
{
    unsigned int fileTime,curTime, age;
    tFoundFilesVector::iterator iter;
FILETIME ftNow;
__int64 nFileSize;
    LARGE_INTEGER li;    
li.LowPart = ftNow.dwLowDateTime;
li.HighPart = ftNow.dwHighDateTime;

CoFileTimeNow(&ftNow);
    curTime = ((_int64) &ftNow.dwHighDateTime << 32) + &ftNow.dwLowDateTime;

    for (iter=fileList.begin(); iter<fileList.end(); iter++)
    {
    fileTime = ((_int64)iter->ftLastWriteTime.dwHighDateTime << 32) + iter-                       >ftLastWriteTime.dwLowDateTime;

    age = curTime - fileTime;

    cout << "FILE: '" << iter->cFileName << "', AGE: " << (INT64)age/10000000UL << " seconds" <<     endl;
    }
}

int main()
{
string fileSpec = "*.*";
tFoundFilesVector foundFiles;
tFoundFilesVector::iterator iter;

int foundCount = 0;

getFileList(L"*.c??", foundFiles);
getFileList(L"*.h", foundFiles);

foundCount = foundFiles.size();
if (foundCount)
{
    cout << "Found "<<foundCount<<" matching files.\n";
    showFileAge(foundFiles);
}
return 0;
}

На этой линии .....

1 Ответ

5 голосов
/ 02 октября 2011

Ошибка здесь:

curTime = ((_int64) &ftNow.dwHighDateTime << 32) + &ftNow.dwLowDateTime;

dwHighDateTime и dwLowDateTime уже имеют тип int.И все же вы берете их адрес.Поэтому присвоение curTime становится указателем на int.

То, что вы хотите, это:

curTime = ((_int64) ftNow.dwHighDateTime << 32) + ftNow.dwLowDateTime;

Второй выпуск:

curTime и fileTimeтолько 32-битные.Вам нужно сделать их 64-битными целыми числами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...