关于void*的转换问题。

失落的羊 2010-03-16 04:03:17

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));
data->module = socketModule;


}


BCB6.0编译,提示红色地方老是出错。不能转换void *
...全文
118 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
w88529593 2010-03-23
  • 打赏
  • 举报
回复
学习一下……
勉励前行 2010-03-22
  • 打赏
  • 举报
回复
不同的编译器其默认调用约定可能不一样。
勉励前行 2010-03-22
  • 打赏
  • 举报
回复
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 指针一般会指定调用约定。因为不同的编译器其调用约定可能不一样。
我不懂电脑 2010-03-18
  • 打赏
  • 举报
回复
Callback确定是函数指针,指到了对应函数吗?
lhy 2010-03-18
  • 打赏
  • 举报
回复
(struct AsyncServerSocket_Data*)
中的struct去掉
(AsyncServerSocket_Data*)
sczyq 2010-03-18
  • 打赏
  • 举报
回复
也可试试:

(FARPROC) ltms->CallbackPtr = Callback;
sczyq 2010-03-18
  • 打赏
  • 举报
回复
data->module = (AsyncServerSocket_Data*)socketModule;
-----------------------------------------------
关于函数指针,建议修改参数就很顺利啦
void ILibLifeTime_Add(void *LifetimeMonitorObject,void *data, int seconds,
void (* Callback)(void *), void (* Destroy)(void *))
{
...
}



失落的羊 2010-03-16
  • 打赏
  • 举报
回复
继续问题:

struct LifeTimeMonitorData
{
long ExpirationTick;
void *data;
void (*CallbackPtr)(void *data);
void (*DestroyPtr)(void *data);
struct LifeTimeMonitorData *Prev;
struct LifeTimeMonitorData *Next;
};

void ILibLifeTime_Add(void *LifetimeMonitorObject,void *data, int seconds, void* Callback, void* Destroy)
{
......
struct LifeTimeMonitorData *ltms = (struct LifeTimeMonitorData*)malloc(sizeof(struct LifeTimeMonitorData));
ltms->CallbackPtr = Callback;
ltms->DestroyPtr = Destroy;
}


红色部分怎么转换类型啊?
失落的羊 2010-03-16
  • 打赏
  • 举报
回复
data->module 是struct AsyncServerSocket_Data* 类型的。
regersubadm 2010-03-16
  • 打赏
  • 举报
回复
这要看data->module是什么类型的了,如果data->module不是void*肯定是赋不过去的,所以应该将socketModule强转成data->module类型才行。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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