2

我有一堂课:

class SomeClass
{
    public:
        void Init ();

    private:
        LRESULT CALLBACK WndProc (HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam);
};

另外,在另一个文件中,我有一个功能:

void MakeWindow (WNDPROC wnd_proc, DWORD style, HICON lg_icon, ...);

第一个参数应该将 LRESULT CALLBACK 函数作为输入。在某个地方,我也有一个 Init 函数的定义:

void SomeClass::Init ()
{
    MakeWindow (this->WndProc, WM_POPUP, NULL, ...);
}

当我尝试传递this->WndProc到VS2012 时,这给了我错误 C3867 WNDPROC wnd_proc。有什么办法可以将LRESULT CALLBACK WndProc函数传递给MakeWindow

4

1 回答 1

3

问题是您的WndProc方法是实例方法,因此不匹配WNDPROC。因为它是一个实例方法,所以它接收一个额外的、隐含的this参数。

您需要将其声明为static方法,以使其与WNDPROC.

于 2013-09-22T11:58:52.020 回答