回调设置及调用方法

来源:互联网 发布:别哭了宝贝网络歌手 编辑:程序博客网 时间:2024/06/06 19:50
exe中定义回调函数
C/C++ code
?
1
2
3
4
5
6
7
8
// 回调函数
typedef void (CALLBACK *fCallBack)(PVOID,DWORD); 
VOID CALLBACK RecvDataByCallback(_IN PVOID pvBuffer, _IN DWORD dwSize)
{
    // 在exe中分配内存
     PBYTE pBuf = new BYTE[dwSize];
     memcpy(pBuf , pvBuffer, dwSize); // 拷贝DLL中pvBuffer里的数据到EXE中pBuf里
}

C/C++ code
?
1
2
3
// 设置函数
// 该函数在DLL中定义并导出
SetRecvCallback((PVOID)&RecvDataByCallback);


dll中定义回调函数
C/C++ code
?
1
2
3
4
5
6
7
// 接收回调函数地址并保存
typedef void (CALLBACK *fCallBack)(PVOID,DWORD);
fCallBack g_pCallback = NULL; 
VOID SetRecvCallback((PVOID)&RecvDataByCallback)
{
     g_pCallback = (fCallBack)RecvDataByCallback;
}


C/C++ code
?
1
2
3
4
5
6
7
// 接收是对操作
// 例如使用SOCKET,采用事件驱动时
    case FD_READ // 抱歉,我好久没用SOCKET了,消息记不清了,这里是一个消息表示有数据到达
         // 如接收UDP的数据
         nLen=recvfrom(hSocket,buf,4096,0,(struct sockaddr*)&from,&nLength);
        // 使用回调
        g_pCallback((PVOID)buf, (DWORD)nLen); 

0 0