Приведение WIN32_FIND_DATA к LPVOID - PullRequest
1 голос
/ 02 декабря 2011

Как я могу привести WIN32_FIND_DATA к LPVOID?

Я пытаюсь подключить функцию, но не могу привести WIN32_FIND_DATA к LPVOID

это моя функция:

/* New FindFirstFileW Function */
HANDLE WINAPI newFindFirstFileExW(__in LPCTSTR lpFileName, __in FINDEX_INFO_LEVELS fInfoLevelId, __out LPVOID lpFindFileData,  __in FINDEX_SEARCH_OPS fSearchOp,
                                     __reserved  LPVOID lpSearchFilter, __in DWORD dwAdditionalFlags)
{
    HANDLE hFind;
    WIN32_FIND_DATA findData;
    BOOL ret;
    hFind = FindFirstFileExW(lpFileName, fInfoLevelId, &findData, fSearchOp, lpSearchFilter, dwAdditionalFlags);

    if (hFind == INVALID_HANDLE_VALUE)
        return hFind;

    // if first file name starts with HIDE_NAME_W skip the file
    if (wcsstr(findData.cFileName, HIDE_NAME_W) != 0)
    {
        ret = true;
        do {
            ret = FindNextFileW(hFind, &findData);
        } while (!ret && wcsstr(findData.cFileName, HIDE_NAME_W) != 0);

        if (!ret)
        {
            SetLastError(ERROR_FILE_NOT_FOUND);
            return INVALID_HANDLE_VALUE;
        }
    }

    lpFindFileData = reinterpret_cast<LPVOID>(findData);
    return hFind;
}

EDIT: Спасибо всем за вашу помощь, теперь она работает, моя проблема в том, что я забыл изменить вызванная функция .. я подключал к FindFirstFileExW какую-то другую функцию

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Вы должны скопировать WIN32_FIND_DATA в память в lpFindFileData. Строка перед последним возвратом должна выглядеть так:

*reinterpret_cast<WIN32_FIND_DATA*>(lpFindFileData) = findData;
2 голосов
/ 02 декабря 2011

lpFindFileData = reinterpret_cast<LPVOID>(findData);

findData не является указателем в этом контексте, это фактический WIN32_FIND_DATA.

Сделайте это вместо:

lpFindFileData = reinterpret_cast<LPVOID>(&findData);

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