C++ 必须调用lpfnWndProc成员函数

C++ 必须调用lpfnWndProc成员函数,c++,windows,borland-c++,C++,Windows,Borland C++,我有一个应用程序需要检测新设备的插入。 但是我在“wndClass.lpfnWndProc=reinterpret_cast(WndProcTest);”上得到了一个错误,错误是“必须调用成员函数或获取其地址”。 我使用Borland C++ Builder 6。 也许有人知道我做错了什么 我的代码AppMainForm.cpp: bool TAppMainForm::InitWindowClass() { WNDCLASSEX wndClass; wndClass.cbSiz

我有一个应用程序需要检测新设备的插入。 但是我在“wndClass.lpfnWndProc=reinterpret_cast(WndProcTest);”上得到了一个错误,错误是“必须调用成员函数或获取其地址”。 我使用Borland C++ Builder 6。 也许有人知道我做错了什么

我的代码AppMainForm.cpp:

bool TAppMainForm::InitWindowClass()
{
    WNDCLASSEX wndClass;

    wndClass.cbSize = sizeof(WNDCLASSEX);
    wndClass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
    wndClass.hInstance = reinterpret_cast<HINSTANCE>(GetModuleHandle(0));
    wndClass.lpfnWndProc = reinterpret_cast<WNDPROC>(WndProcTest );
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hIcon = LoadIcon(0,IDI_APPLICATION);
    wndClass.hbrBackground = CreateSolidBrush(RGB(192,192,192));
    wndClass.hCursor = LoadCursor(0, IDC_ARROW);
    wndClass.lpszClassName = g_szClassName;
    wndClass.lpszMenuName = NULL;
    wndClass.hIconSm = wndClass.hIcon;

    if ( ! RegisterClassEx(&wndClass) )
    {
        //ErrorHandler(TEXT("RegisterClassEx"));
        return false;
    }
    return true;
}

INT_PTR WINAPI TAppMainForm::WndProcTest(
        HWND hWnd,
        UINT message,
        WPARAM wParam,
        LPARAM lParam
    )
{
    // do something
}

您所遇到的问题是,您试图获取C++成员函数的地址,并将其赋值给C函数的指针, LPFNWNDPROC .< /P> < P>可能的修复方法:

  • 使成员函数为静态

  • 不要使用成员函数

  • 将函数声明为静态

    静态INT_PTR WINAPI WndProcTest(..) { //做点什么 }

    wndClass.lpfnWndProc=重新解释强制转换(InitWindowClass::WndProcTest)

  • 使WndProcTest成为老式的C函数(并将其从类中删除):

    INT_PTR WINAPI WndProcTest(..) { //做点什么 }


  • 这正是重新解释演员阵容的目的。有一个潜在的问题,成员函数指针与函数指针完全不同,因为前者需要一个对象来操作。谢谢你的回答。你知道正确的方法是什么吗?
    public: 
        bool InitWindowClass();
        INT_PTR WINAPI WndProcTest(
            HWND hWnd,
            UINT message,
            WPARAM wParam,
            LPARAM lParam
        );