Ошибка указателя EnumWindows - PullRequest
       2

Ошибка указателя EnumWindows

1 голос
/ 09 августа 2011

Я получаю странную ошибку при попытке EnumWindows к функции внутри класса.Вот мой код

EnumWindows(&ConsoleDetector::EnumWindowsProc, NULL);

BOOL CALLBACK ConsoleDetector::EnumWindowsProc(HWND wnd, LPARAM lParam)
{
    char className[200];
    GetClassName(wnd, className, 200);
    if (strcmp(className, "ConsoleWindowClass"))
        m_result.push_back(wnd);
    return TRUE;
}

Вот ошибка, которую я получаю:

ConsoleDetector.cpp:30: error: cannot convert 'BOOL (ConsoleDetector::*)(HWND__*, LPARAM)' to 'BOOL (*)(HWND__*, LPARAM)' for argument '1' to 'BOOL EnumWindows(BOOL (*)(HWND__*, LPARAM), LPARAM)'

Используя MingW.Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Вы передаете метод экземпляра.Вам нужно передать простую функцию, а не метод, связанный с экземпляром.

Это должно быть объявлено так:

BOOL CALLBACK EnumWindowsProc(HWND wnd, LPARAM lParam)

Передать экземпляр ConsoleDetector в lParam параметр EnumWindows, и он, в свою очередь, будет передан вашему обратному вызову.

Например:

BOOL CALLBACK EnumWindowsProc(HWND wnd, LPARAM lParam)
{
    ConsoleDetector cd = static_cast<ConsoleDetector*>(lParam);
    //do stuff with cd and wnd
}

ConsoleDetector *cd = ...
EnumWindows(EnumWindowsProc, static_cast<LPARAM>(cd));
2 голосов
/ 09 августа 2011

Вы не можете использовать функцию обратного вызова Windows с функциями-членами класса в c ++. Разрешены только статические функции класса или функции не класса.

Как функция EnumWindows должна знать экземпляр класса? Вы можете предоставить только указатель на функцию, а не указатель экземпляра на EnumWindows

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