2011-08-09 2 views
1

클래스 내부의 함수에 EnumWindows를 사용하려고하면 이상한 오류가 발생합니다.EnumWindows 포인터 오류

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를 사용 : 여기에 내 코드 여기

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; 
} 

은 점점 오류 메신저 것입니다. 도움 주셔서 감사합니다.

답변

4

인스턴스 메소드를 전달 중입니다. 인스턴스에 바인드 된 메소드가 아닌 일반 함수를 전달해야합니다.

BOOL CALLBACK EnumWindowsProc(HWND wnd, LPARAM lParam) 

EnumWindowslParam 매개 변수에 ConsoleDetector의 인스턴스를 전달하고이를 다시 콜백으로 전달됩니다

그것은이이 같이 선언한다. 이처럼

:

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)); 
+0

나는 길을 찾았고, 내 벡터를 LPARAM으로 전달했습니다. 도움 tho 주셔서 감사합니다. – SBSTP

+0

그건 내가 위에서 쓴 것과 동일합니다. –

2

당신은 C에서 클래스 멤버 함수와 윈도우 콜백 기능을 사용할 수 없습니다 ++. 정적 클래스 함수 또는 비 클래스 함수 만 허용됩니다.

EnumWindows 함수의 클래스 인스턴스는 어떻게해야합니까? 인스턴스 포인터가 아닌 함수 포인터 만 제공 할 수 있습니다. EnumWindows