求判断语句。

小和大的区别 2013-09-13 12:08:21
class iocpso;

class iocpso
{
public:
HANDLE so;
int Connect(PCHAR host,WORD port);
int Send(char* buf,int cb);
}

int WINAPI iocpConnect(HANDLE& so,PCHAR host)//连接服务器
{
iocpso* so_obj = new iocpso;//初始化
int soso = so_obj->Connect(host,port);//返回句柄
so = (HANDLE)so_obj;
return soso;
}

int WINAPI iocpSend(HANDLE so,char* buf,int cb)//发送数据
{
//((iocpso*)so) 如何判断这个是否有效?可以调用Send。
return ((iocpso*)so)->Send(buf,cb);
}
...全文
167 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
星際訪客 2013-09-14
  • 打赏
  • 举报
回复
LS != PPower LS == LZ
星際訪客 2013-09-14
  • 打赏
  • 举报
回复
so = NULL NEW so if (so == NULL) soso LS...so...soso......
勉励前行 2013-09-14
  • 打赏
  • 举报
回复
int WINAPI iocpConnect(HANDLE& so,PCHAR host)//连接服务器 { iocpso* so_obj = new iocpso; //内存中生成一个对象 int soso = so_obj->Connect(host,port);// so = (HANDLE)so_obj; return soso; //只返回一个句柄,对象无法被再次使用,对象生命期也没托管,这就是内存泄漏。 } int WINAPI iocpSend(HANDLE so,char* buf,int cb)//发送数据 { //((iocpso*)so) 如何判断这个是否有效?可以调用Send。 return ((iocpso*)so)->Send(buf,cb); //从对象中的一个变量,是无法安全得到对象的地址的。 //一个方法是搜索内存区域,然后估计出对象的地址,但那是黑客用的手段,是不安全的。 } //总的来说,是设计错误,是代码错误,结论是认知上的错误。
小和大的区别 2013-09-14
  • 打赏
  • 举报
回复
((iocpso*)so)相当于一个内存地址而已。
小和大的区别 2013-09-14
  • 打赏
  • 举报
回复
dynamic_cast就等于调用类了。当然不行呢。 "int so=12345678 为什么要(会)这样"//因为是dll,有可能点调用了iocpSend乱传进第一个参数。 还没有解决的法子呢。 待高手
chinayu2007 2013-09-13
  • 打赏
  • 举报
回复
if(dynamic_cast<iocpso*>so)这样强制转换行吗?
星際訪客 2013-09-13
  • 打赏
  • 举报
回复
把 iocpso 的 Connect 與 Send 也列出來看看...... iocpso 類似乎規劃封裝的不完善~ 若要 Send 前的判斷應該是取決 Connect 是否先取得連線......
星際訪客 2013-09-13
  • 打赏
  • 举报
回复
代碼結構怪怪滴......
sololie 2013-09-13
  • 打赏
  • 举报
回复
int so=12345678 为什么要(会)这样
缘中人 2013-09-13
  • 打赏
  • 举报
回复
dynamic_cast可以转换类,转换不成功就是NULL 还可以用try catch....
小和大的区别 2013-09-13
  • 打赏
  • 举报
回复
引用 1 楼 chinayu2007 的回复:
if(dynamic_cast<iocpso*>so)这样强制转换行吗?
int WINAPI iocpSend(HANDLE so,char* buf,int cb) HANDLE so有可能是int so=12345678

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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