我有一个班级:
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
传递给WNDPROC wnd_proc
时,这会在VS2012中给出错误C3867。我有什么办法可以将LRESULT CALLBACK WndProc
函数传递给MakeWindow
吗?
答案 0 :(得分:3)
问题是您的WndProc
方法是实例方法,因此与WNDPROC
不匹配。因为它是一个实例方法,所以它会收到一个额外的,隐含的this
参数。
您需要将其声明为static
方法才能与WNDPROC
兼容。