问回调函数定义的基本问题
下面是一个成员函数中的几行代码:
CTcpDrv* pNew = new CTcpDrv(hDrvObject, pRemoteAddr, port, bAuto, dwTime, StOnRead, StOnError, StOnConnect, this);
if (!pNew)
{
ASSERT(0);
return NULL;
}
在该成员函数所在类头文件中的构造函数定义有:
CTcpDrv(
HANDLE hDrvObject, // DRVOBJECT句柄
LPCTSTR pAddr, // 地址字符串指针
WORD wPort, // 对端端口号
BOOL bAuto, // 是否自动连接
DWORD dwTime, // 重连时间
LPONREAD pOnRead, // 读回调函数指针
LPONERROR pOnError, // 出错回调函数指针
LPONCONNECT pOnConnect, // 连接回调函数指针
HANDLE hUser // 回调注册句柄
);
----
从构造函数定义,CTcpDrv(hDrvObject, pRemoteAddr, port, bAuto, dwTime, StOnRead, StOnError, StOnConnect, this)中的StOnConnect函数为回调函数;这个(回调函数)一般怎么(哪里)定义的?
[解决办法]
哪里?在源代码中搜一下就是了。
[解决办法]
从这个类的设计者的角度来看:
1.类的设计者提供回调函数的原型;
2.类的使用者根据回调函数的原型,来实现自定义的回调函数。
[解决办法]
搜索当前工程 ~
[解决办法]
这个(回调函数)一般怎么(哪里)定义的?
====================
呵呵, 这个没有严格的限制 ~
[解决办法]
回调只是一种解决问题的方法而已。
当然是注册到了某一个地方。不过,具体是哪儿,那倒不一定,那要看CTcpDrv这个函数编写者的意愿了,可能是在某个全局变量中,某个局部静态变量中,某个对象中……都有可能。
总之,它好不容易从你这儿要了个函数指针,是肯定不会让他丢掉的,你就放心好了。:)