Не работает Module32First() c++

Имеется вот такой код:

void get_m(const char* m_name, DWORD pid)
{

    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);

    MODULEENTRY32 m_entry;

    if (Module32First(hSnap, &m_entry))
    {
        std::cout << m_entry.szModule << (DWORD)m_entry.modBaseAddr << std::endl;
        while (Module32Next(hSnap, &m_entry))
        {
            std::cout << m_entry.szModule << (DWORD)m_entry.modBaseAddr << std::endl;
        }
    }
    else
        std::cout << "failed";
    CloseHandle(hSnap);

Он выводит список модулей запущенного процесса и их адреса. Но проблемы начинаются еще на стадии вызова функции Module32First, и в итоге выводится failed, хотя программа должна работать дальше и делать вышесказанное. Не могли бы вы подсказать, что я делаю не так и как это исправить?


Ответы (1 шт):

Автор решения: PRODIGY

Для обычного перечисления модулей программы, функции API Module32First/Next() слишком громоздки, поскольку требуют цикла. Для этих целей лучше использовать EnumerateLoadedModules() из библиотеки Dbghelp.dll. Она за один вызов возвращает информацию сразу обо всех модулях. Описание здесь..

→ Ссылка