我在一个DLL里面封装了SOCKET,在recv 接受到消息的时候,想把接受到的内容通过回调函数来传递给调用者也就是exe程序。这要如何实现呢
也就是这个回调函数要自己定义 和触发 以及接受。没自己定义过回调函数,不知道如何下手。不知道哪位大侠有空能够做个例子出来! 如何自定义回调函数万分感谢!!!
也就是这个回调函数要自己定义 和触发 以及接受。没自己定义过回调函数,不知道如何下手。不知道哪位大侠有空能够做个例子出来! 如何自定义回调函数万分感谢!!!
解决方案 »
- 求助牛人帮忙指点个思路,小弟利用键盘钩子做个快捷键
- 最近发现有这个头像的用户挺多
- flash插件里swf文件的路径问题
- CXPButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)中的一个问题
- 100分!请问用程序如何复制%SystemRoot%\system32\config下面的文件?
- 调用对话框
- 我用ADO访问SQL Server数据库,发现奇怪的问题,求助!(100分赠送)
- 如何取得按钮的MouseDown事件?
- bios.h被什么文件代替了
- 请问 Visalu C++ 编程资源大全 上的源代码在那里下载。
- 一个包含Com组件的dll,是运行在容器程序的地址空间里面,还是Com管理器的地址空间里面?
- Button
static
callback参数传指针
typedef void (CALLBACK *fCallBack)(...,void*); //回调函数声明
CLIENT_API void SetCallBack(fCallBack, void *);exe调用SetCallBack传入回调函数
例如:
exe中定义回调函数// 回调函数
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里
}
// 设置函数
// 该函数在DLL中定义并导出
SetRecvCallback((PVOID)&RecvDataByCallback);
dll中定义回调函数// 接收回调函数地址并保存
typedef void (CALLBACK *fCallBack)(PVOID,DWORD);
fCallBack g_pCallback = NULL;
VOID SetRecvCallback((PVOID)&RecvDataByCallback)
{
g_pCallback = (fCallBack)RecvDataByCallback;
}// 接收是对操作
// 例如使用SOCKET,采用事件驱动时
case FD_READ // 抱歉,我好久没用SOCKET了,消息记不清了,这里是一个消息表示有数据到达
// 如接收UDP的数据
nLen=recvfrom(hSocket,buf,4096,0,(struct sockaddr*)&from,&nLength);
// 使用回调
g_pCallback((PVOID)buf, (DWORD)nLen);
基本上就是这样子……
你自己在完善一下……
{
if (iTimerID == 3)
{
//////处理
::PostMessage(hwnd,WM_TIMER3,NULL,NULL);
}
}
void CPaint::OnStart()
{
// TODO: Add your control notification handler code here
SetTimer(3,150,TimeProc);
}
{
if (iTimerID == 3)
{
//////处理
::PostMessage(hwnd,WM_TIMER3,NULL,NULL);
}
}
void CPaint::OnStart()
{
// TODO: Add your control notification handler code here
SetTimer(3,150,TimeProc);
}
RecvDataByCallback 这个是在EXE中定义的。DLL里面如何声明或定义他呢?最后一个问题。EXE中是否应该 改成下面这样?
typedef void (CALLBACK *RecvDataByCallback)(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里
}
看糊涂了。希望解答下
RecvDataByCallback fun;//申明一个函数指针
fun(?, ?); //调用EXE中的函数3、是的,你要把函数指针(地址)传给DLL,那样DLL才能正确调用