回调函数的使用

v_023 2009-05-02 07:37:13
不知道怎么书写回调函数,主要是用于通知消息执行,比如用户通过服务器登录后,函数回调通知是成功登录还是失败,以便下一步的操作,这个要怎么定义声明,比如登录的操作函数为login();
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
X0921 2009-05-03
  • 打赏
  • 举报
回复
回调函数就是有系统帮你完成的函数。
v_023 2009-05-02
  • 打赏
  • 举报
回复
不然类要怎么设置好呢
glacier3d 2009-05-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 v_023 的回复:]
我在自己问题补充全吧:
首先我已经定义和实现了一堆功能函数如下:
class CBFTalkClient
{
public:
CBFTalkClient(void);
~CBFTalkClient(void);
//连接到服务器
void Connect(CString& numid/*用户名*/ , CString& server/*服务器(域)*/ , CString& sessionid/*密码*/ ,enum PresenceType presence/*登录状态*/);
//与服务器断开
void Disconnect(void);
//聊天消息发送
void SendChatMsg(CString& toJid, CString…
[/Quote]


回调函数接口类? -------> 设计模式:侦听器模式?
貌似这样设计不太好
v_023 2009-05-02
  • 打赏
  • 举报
回复
我在自己问题补充全吧:
首先我已经定义和实现了一堆功能函数如下:
class CBFTalkClient
{
public:
CBFTalkClient(void);
~CBFTalkClient(void);
//连接到服务器
void Connect(CString& numid/*用户名*/ , CString& server/*服务器(域)*/ , CString& sessionid/*密码*/ ,enum PresenceType presence/*登录状态*/);
//与服务器断开
void Disconnect(void);
//聊天消息发送
void SendChatMsg(CString& toJid, CString& toMsg);
//添加好友
void AddFriends(CString& addFriendJid, CString& addFriendNickName, CString& addFriendGroup);
//删除好友
void RemoveFriends(CString& removeFriendJid);
//设置当前聊天状态,不同数值代表不同的状态,0---离线,1---在线等
void SetPresence(enum PresenceType presence);
//释放资源
void ReleaseRes(void);
//发送文件请求
BOOL OnSendFileRequest(CString& strJidTo, CString& strFileName);
//接收文件请求
BOOL OnRecvFileRequest(CString& strJidFrom, CString& strFileName);
//设置用户组
void SetGroup(CString& strJid, CString& strGroup);
//显示好友列表,参数表示不同好友列表,0---全部好友,1---在线好友
void FriendsList(int nState);
//设置黑名单
void SetBlackMember(CString& strJid);
//输出日志信息
void OutputLogInfo( CString strLogInfo, CBFTalkLogConsole::TEXT_COLOR = CBFTalkLogConsole::TEXT_BLUE );
};
按照以前的做法是在每个功能函数里面增加postmessage来进行消息通知,但是现在要定义出一个回调函数接口类,但是不知道怎么去操作。。比较迷茫,因为以前不怎么用过。可以的话QQ联系更直接点89716691
cnzdgs 2009-05-02
  • 打赏
  • 举报
回复
// 例如Xxx类中定义回调函数如下:
class Xxx
{
// ……
static DWORD CallBackFunction(LPVOID Context);
virtual DWORD OnCallBack();
};

DWORD Xxx::CallBackFunction(LPVOID Context)
{
Xxx* object = (Xxx*)Context;
return object->OnCallBack();
}

// 先声明回调函数指针类型:
typedef DWORD (*CALLBACKPROC)(LPVOID Context);

// 再类似这样定义Login函数:
BOOL Login(CALLBACKPROC CallBackFun, LPVOID Context)
{
// ……
DWORD returnValue = CallBackFun(Context);
// ……
return TRUE;
}

// 在Xxx的某个成员函数中这样调用Login函数:
BOOL b = Login(CallBackFunction, this);
野男孩 2009-05-02
  • 打赏
  • 举报
回复
send和post函数是啥?SendMessage和PostMessage??

在需要用到这两个函数的地方,调用相应的处理函数,那就是回调了。
v_023 2009-05-02
  • 打赏
  • 举报
回复
就是不用send和post这两个函数
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=195
看看这个吧
glacier3d 2009-05-02
  • 打赏
  • 举报
回复
回调函数就是一个传一个函数指针,然后响应的时候调用就行了。
但这里登录成功与否和回调有啥关系呢?
通知消息,就用sendmessage()/postmessage()通知就行了。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧