我正在使用afxwin SetTimer函数设置计时器。该函数接收三个参数,其中一个是回调函数。
我在一个类中设置了一个回调函数(让我们称之为NS)并尝试将其作为参数传递。但是编译器抱怨这个:
void (__stdcall NS::*) (HWND, UINT, UINT_PTR, DWORD);
与:
不同void (__stdcall *) (HWND, UINT, UINT_PTR, DWORD);
我该怎么办?
答案 0 :(得分:4)
制作函数static
*。否则它甚至不是一个函数,而是一个成员函数,这是一个非常不同的动物。此外,正如你所说的那样“将类中的函数作为回调函数传递”是没有意义的:非静态成员函数与对象实例的状态相关联。那个班。
(另外,搜索这个网站,这个问题已经被问了一百多次,并且在整个SO中有很多好的选择。)
*)正如@James指出的那样,如果回调函数有一个C接口,这还不够,在这种情况下你还需要一个免费的extern "C"
包装函数。