尝试将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。 谢谢你的帮助。
答案 0 :(得分:3)
您正在传递实例方法。您需要传递普通函数而不是绑定到实例的方法。
必须这样声明:
BOOL CALLBACK EnumWindowsProc(HWND wnd, LPARAM lParam)
将ConsoleDetector
的实例传递给lParam
的{{1}}参数,然后将其传递给您的回调。
像这样:
EnumWindows
答案 1 :(得分:2)
你不能在c ++中使用带有类成员函数的windows回调函数。只允许使用静态类函数或非类函数。
EnumWindows
函数应该如何知道类的实例?您只能提供函数指针,而不是EnumWindows