jmzz003
驱动牛犊
驱动牛犊
  • 注册日期2004-03-12
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2101回复:7

CALLBACK在类中被编译为空了吗?

楼主#
更多 发布于:2004-06-15 13:52
CALLBACK在类中被编译为空了吗?

#include "stdafx.h"

class Test
{
public:
     Test();
     ~Test();

     void CALLBACK ResetTimer(HWND hwnd, UINT uMsg, UINT idEvent,
                         DWORD dwTime );
};

Test::Test()
{
}

Test::~Test()
{
}

void CALLBACK Test::ResetTimer(HWND hwnd, UINT uMsg, UINT idEvent,
                         DWORD dwTime )
{
    MessageBox(NULL,"1","2",MB_OK);
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     // TODO: Place code here.
    Test t;

    SetTimer(NULL,0x12345678,1000*60*3,t.ResetTimer);
    return 0;
}

错误信息如下:

D:TEMPtt.cpp(16) : error C2664: 'SetTimer' : cannot convert parameter 4 from 'void (struct HWND__ *,unsigned int,unsigned int,unsigned long)' to 'void (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned long)'
       None of the functions with this name in scope match the target type


我是如此定义的
void CALLBACK ResetTimer(HWND hwnd, UINT uMsg, UINT idEvent,
                         DWORD dwTime );
应该就是编译为void (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,unsigned long)
为什么是void (struct HWND__ *,unsigned int,unsigned int,unsigned long)?
因此我认为是CALLBACK被编译为空.
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-06-15 23:19
直接定义STDCALL即可,何必多此一举???
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
jmzz003
驱动牛犊
驱动牛犊
  • 注册日期2004-03-12
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-16 09:23
换成__stdcall错误信息一样!

#include "stdafx.h"

class Test
{
public:
Test();
~Test();

void __stdcall ResetTimer(HWND hwnd, UINT uMsg, UINT idEvent,
DWORD dwTime );
};

Test::Test()
{
}

Test::~Test()
{
}

void __stdcall Test::ResetTimer(HWND hwnd, UINT uMsg, UINT idEvent,
DWORD dwTime )
{
MessageBox(NULL,"1","2",MB_OK);
}

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
Test t;

SetTimer(NULL,0x12345678,1000*60*3,t.ResetTimer);
return 0;
}
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-06-16 11:45
类的成员函数是thiscall
声明成static的
jmzz003
驱动牛犊
驱动牛犊
  • 注册日期2004-03-12
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-16 14:39
麻烦!
jmzz003
驱动牛犊
驱动牛犊
  • 注册日期2004-03-12
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-16 14:40
算了,不放到类中了!
walkonthesky
驱动中牛
驱动中牛
  • 注册日期2003-11-26
  • 最后登录2012-11-06
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-18 16:04
你做什么东西,要用回掉
WINDOWS的消息处理机制用类封装?
但好像也不是这样封装
[img]http://www.driverdevelop.com/forum/upload/walkonthesky/2004-07-08_2004-07-07_b847.gif[/img]
netxy
驱动牛犊
驱动牛犊
  • 注册日期2004-07-15
  • 最后登录2004-07-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-16 08:32
你声明的时候是一个全局函数,但是定义的时候变成了类内函数,这当然会产生编译错误。
游客

返回顶部