最近在参与一个项目网络协议栈SDK的开发,大部分功能都是用回调函数来实现的。现整理了一个简单的回调函数模型,算是对这一阶段工作的小总结吧。回调函数定义及调用在DLL中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
////////////////////////////////////////////////////////////////////////// // 上层(应用层) // 回调函数实现 int OnMedia(char *pszBuf) { if (pszBuf) { printf("%s/n", pszBuf); // 处理获取到的底层数据 char * pszAudio = "Audio info..."; pszBuf = pszAudio; // 给底层传输数据 } else { return -1; } return 0; } ////////////////////////////////////////////////////////////////////////// // 底层(服务) // 定义 typedef int (*fOnMedia)(char *pszBuf); struct cbMedia { fOnMedia cbOnMedia; cbMedia():cbOnMedia(0){} }; cbMedia m_cbMedia; int main(int argc, char* argv[]) { // 调用 char szBuff[32]; char *pVideo = "Video info..."; int iLen = strlen(pVideo); memcpy(szBuff, pVideo, iLen); szBuff[iLen] = '/0'; m_cbMedia.cbOnMedia = OnMedia; if (m_cbMedia.cbOnMedia) { int iRet = m_cbMedia.cbOnMedia(szBuff); // 回调数据给上层 if (!iRet) { // Success printf("%s/n", szBuff); // 处理上层数据 } else { // Error } } return 0; } |
发表评论
要发表评论,您必须先登录。