EnumWindows指针错误

时间:2011-08-09 18:42:06

标签: c++ enums

尝试将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 个答案:

答案 0 :(得分:3)

您正在传递实例方法。您需要传递普通函数而不是绑定到实例的方法。

必须这样声明:

BOOL CALLBACK EnumWindowsProc(HWND wnd, LPARAM lParam)

ConsoleDetector的实例传递给lParam的{​​{1}}参数,然后将其传递给您的回调。

像这样:

EnumWindows

答案 1 :(得分:2)

你不能在c ++中使用带有类成员函数的windows回调函数。只允许使用静态类函数或非类函数。

EnumWindows函数应该如何知道类的实例?您只能提供函数指针,而不是EnumWindows

的实例指针