求1设计思路
求一设计思路<C风格回调函数相关>
大家好,有这样一个需求。
有一个dll,其中有一个传入函数接口func_callback,提供调用方回调数据。函数通过句柄来关联数据。
class dll_proxy
{
....
private:
HANDLE handle_;
};
void __cdcel func_callback(HANDLE handle_, PVOID params);
有什么好方法可以通过handle_来关联到类dll_proxy对应handle_的对象上吗?
------解决方案--------------------
dll返回的HANDLE socket_改为返回HANDLE *p_socket_
根据p_socket_计算其所属的dll_proxy对象 可以通过宏来实现
这样
dll_proxy *p_dll_proxy = ContainerOf(p_socket_, dll_proxy, socket_)
大家好,有这样一个需求。
有一个dll,其中有一个传入函数接口func_callback,提供调用方回调数据。函数通过句柄来关联数据。
class dll_proxy
{
....
private:
HANDLE handle_;
};
void __cdcel func_callback(HANDLE handle_, PVOID params);
有什么好方法可以通过handle_来关联到类dll_proxy对应handle_的对象上吗?
------解决方案--------------------
dll返回的HANDLE socket_改为返回HANDLE *p_socket_
根据p_socket_计算其所属的dll_proxy对象 可以通过宏来实现
#define MemOffset(ClassName, MemberName) \
((DWORD)(&(((ClassName *)0)->MemberName)))
#define ContainerOf(MemberAddr , ClassName , MemberName) \
((ClassName *)((DWORD)(MemberAddr) - MemOffset(ClassName , MemberName)))
这样
dll_proxy *p_dll_proxy = ContainerOf(p_socket_, dll_proxy, socket_)