首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于void*的转换有关问题

2012-02-20 
关于void*的转换问题。C/C++ codevoid ILibAsyncServerSocket_PostSelect(void* socketModule,int slct, fd

关于void*的转换问题。

C/C++ code
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]}


BCB6.0编译,提示红色地方老是出错。不能转换void * 


[解决办法]
这要看data->module是什么类型的了,如果data->module不是void*肯定是赋不过去的,所以应该将socketModule强转成data->module类型才行。
[解决办法]
Callback确定是函数指针,指到了对应函数吗?
[解决办法]
data->module = (AsyncServerSocket_Data*)socketModule;
-----------------------------------------------
关于函数指针,建议修改参数就很顺利啦
void ILibLifeTime_Add(void *LifetimeMonitorObject,void *data, int seconds, 
void (* Callback)(void *), void (* Destroy)(void *))
{
...
}




[解决办法]
也可试试:

(FARPROC) ltms->CallbackPtr = Callback;
[解决办法]
C/C++ code
(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 指针一般会指定调用约定。因为不同的编译器其调用约定可能不一样。

热点排行