关于void*的转换问题。
void ILibAsyncServerSocket_PostSelect(void* socketModule,int slct, fd_set *readset, fd_set *writeset, fd_set *errorset){struct AsyncServerSocketModule *module = (struct AsyncServerSocketModule*)socketModule;....data = (struct AsyncServerSocket_Data*)malloc(sizeof(struct AsyncServerSocket_Data));[color=#FF0000]data->module = socketModule;[/color]}
(struct AsyncServerSocket_Data*)
[解决办法]
struct LifeTimeMonitorData
{
long ExpirationTick;
void *data;
void (*CallbackPtr)(void *data);
void (*DestroyPtr)(void *data);
struct LifeTimeMonitorData *Prev;
struct LifeTimeMonitorData *Next;
};
void* Callback;
LifeTimeMonitorData Item;
1: Item.CallbackPtr = (void (*)(void *))Callback ;
2: 常用的方式,也是比较易读的方式
typedef void (*TCallbackPtr)(void *data);
Item.CallbackPtr = TCallbackPtr(Callback);
另外,callback 指针一般会指定调用约定。因为不同的编译器其调用约定可能不一样。