【问题标题】:lpfnWndProc Member function must be calledlpfnWndProc 成员函数必须被调用
【发布时间】:2014-04-28 07:12:13
【问题描述】:

我有一个需要检测插入新设备的应用。 但我在“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
}

头文件:

public: 
    bool InitWindowClass();
    INT_PTR WINAPI WndProcTest(
        HWND hWnd,
        UINT message,
        WPARAM wParam,
        LPARAM lParam
    );

【问题讨论】:

  • 这正是 reinterpret_cast 不适合的。有一个潜在的问题是成员函数指针与函数指针完全不同,因为前者需要一个对象来操作。

标签: c++ windows borland-c++


【解决方案1】:

您遇到的问题是您试图获取 C++ 成员函数的地址并将其分配给指向 C 函数的指针 lpfnWndProc。

【讨论】:

  • 感谢您的回答。你知道正确的方法是什么吗?
【解决方案2】:

解决此问题的可能方法:

  1. 使成员函数静态

  2. 不要使用成员函数

  3. 将函数声明为静态

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

    wndClass.lpfnWndProc = reinterpret_cast(InitWindowClass::WndProcTest );

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多