还是这个问题,回调函数

xengine-qyt 2010-11-16 10:58:34
一个OCX控件,会被多次加载,一个API 提供一个回调函数,写死了,无法通过传递this 指针获取类指针而调用类中的成员。请问,在这种情况下如何保证 每次OCX控件被加载,这回调函数都是在自己的空间里面? 麻烦给个示例

比如 函数 void API_Playing(LPVOID pClientinfo, void(CALLBACK *ReadDataCallBack)(DWORD Channel,UCHAR *pPacketBuffer,DWORD nPacketSize)) 这里面包含一个回调函数

在类的一个成员函数里面使用这个函数

void WINAPI ReadData(DWORD Channel,unsigned char *pBuff,DWORD nSize) //这里要如何声明和调用啊?

API_Playing(&VOID,ReadBuf);


WHO HELP ME!!!
关键是每次都在自己空间里面被加载。
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤客天涯 2010-11-16
  • 打赏
  • 举报
回复
定义:
static void WINAPI ReadData(DWORD Channel,unsigned char *pBuff,DWORD nSize);
实现:
void WINAPI CXXX::ReadData(DWORD Channel,unsigned char *pBuff,DWORD nSize)
{
};

设置回调:
void CXXX::Test()
{
API_Playing(this,ReadData);//第一个参数该传什么指针要看你OCX如何定义
}
zhouyongku 2010-11-16
  • 打赏
  • 举报
回复
在类里面声明静态成员函数
class A


  public:
static DWORD WINAPI ReadData(....);

DWORD WINAPI A::ReadData()
{
}
xuting0 2010-11-16
  • 打赏
  • 举报
回复
声明一个wndproc的变量=(WNDPROC)类变量.SetWindowLongPtrW(GWLP_WNDPROC, LONG_PTR(StatusBarSubclassProc));

用SetWindowLongPtrW 调用回调函数
superarhow 2010-11-16
  • 打赏
  • 举报
回复
也许你需要用那个啥trunk技术. 例子这里有:
http://blog.csdn.net/superarhow/archive/2006/07/10/898261.aspx
无言猪 2010-11-16
  • 打赏
  • 举报
回复
void API_Playing(LPVOID pClientinfo, void(CALLBACK *ReadDataCallBack)(DWORD Channel,UCHAR *pPacketBuffer,DWORD nPacketSize))

这个回调函数设计的不好啊,前面有一个用户数据传进去,但是回调函数里面没有给你,你悲剧了.
xengine-qyt 2010-11-16
  • 打赏
  • 举报
回复
API_Playing 是我调用,是别人提供给我的 不是我提供给别人!

主要是 就算申明为静态 在类里面,我要如何在这个回调函数里面操作类里面的成员?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧