回调设置及调用方法

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); 

你可能感兴趣的:(回调设置及调用方法)