先列出部分有关代码:
//这是在类中申明的回掉函数和静态成员,
staticWNDPROC Buttona;
static LRESULT CALLBACK ButtonProc1(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
//这是回掉函数的定义
LRESULT CALLBACK Button::ButtonProc1(HWND hwnd1,UINT message,WPARAM wParam,LPARAM lParam)
{
return CallWindowProc(Buttona, hwnd1, message, wParam, lParam);
}
我已经都设置成最小化的精简了,没有其他问题, 回掉函数中返回的 Button1Proc也是静态的
一下是报错内容:
LINK2001:无法解析的外部符号" private: static long ()__stdcall* Button::Button1Proc)
(struct HWND__*,unsigned int, unsigned int ,long)"
(?Button1Proc@Button@@QP6GJPAUHWND_@@IIj@ZA)
为了节约大家时间,我给出我做过的尝试:
1.回掉函数需要是静态的, 也只能调用静态成员. 这一点我做到了
2.类中申明的函数没定义会出现无法解析,我定义了,并且很确定任何名字,类型都没有错
问题是找出了,但是无法解决
Buttona= (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC,(LONG)ButtonProc1);
加了这一句代码就出错了,但是我必须要这一句代码
Button::Button1Proc? 笔误?在你尝试调用Button1Proc时候才会有这个错误
哎,我说过了,你们要无视一切笔误什么数据类型这种问题.
在我提问之前,已经非常谨慎的检查过了
并且我现在问题以解决,谢谢
排查发现
Buttona= (WNDPROC)SetWindowLong(hwnd, GWL_WNDPROC,(LONG)ButtonProc1);
这一行代码出现问题, 把Buttona放全局里即可解决