VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1478|回复: 5

[求助] 观远控教程,代码有疑问,求解!!!!!!!!

[复制链接]
96_avatar_middle
online_vip 发表于 2015-9-4 22:06:47 | 显示全部楼层 |阅读模式
一共6个问题;
第1处,关于delete:
(一)
void CCmdShell::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);
    // TODO: 在此处添加消息处理程序代码
    if(nType == SIZE_MINIMIZED)
    {
        return;
    }
    CWnd *pWnd,*pWnd1;
    pWnd = GetDlgItem(IDC_EDIT1);     //获取控件句柄
    pWnd1 = GetDlgItem(IDC_EDIT2);
    if(pWnd && pWnd1)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
    {
        CRect rect,rect_l;   //获取控件变化前大小
        GetClientRect(&rect_l);
        pWnd->GetWindowRect(&rect);
        ScreenToClient(&rect);
        rect.right = rect.right + (rect_l.right - m_rect.right);
        rect.bottom= rect.bottom + (rect_l.bottom - m_rect.bottom);
        pWnd->MoveWindow(rect);//设置控件大小

        pWnd1->GetWindowRect(&rect);
        ScreenToClient(&rect);
        rect.top = rect.top + (rect_l.bottom - m_rect.bottom);
        rect.right = rect.right + (rect_l.right - m_rect.right);
        rect.bottom= rect.bottom + (rect_l.bottom - m_rect.bottom);
        pWnd1->MoveWindow(rect);//设置控件大小
    }
    else
    {
        delete pWnd;//1.这里为什么要删除?2.根据上下文,代码到此,pWnd应该为NULL,请问为什么要delete NULL?
    }
    GetClientRect(&m_rect);
}
(二)
wchar_t *pwText;
pwText = new wchar_t[dwNum];
if(!pwText)//3.请问此处代码如pwText==NULL,进入执行delete []pwText是为什么?有必要delete吗?不明白
{
     delete []pwText;
}
(三)
CCmdShell *m_cmd;

void CItemData::RunToCmdShell()
{
    if(m_cmd == NULL)
    {
        m_cmd = new CCmdShell(this,m_sock);
        m_cmd->Create(IDD_CMDSHELL,this);
        m_cmd->ShowWindow(SW_NORMAL);
    }
    else
    {
        m_cmd->SetActiveWindow();
    }
}

((CItemData*)this->m_pParentWnd)->m_cmd = NULL;
    DestroyWindow();
    delete this;//4.请问这3行代码改成这样可以吗?5.如果不可以,为什么?如下:
delete ((CItemData*)this->m_pParentWnd)->m_cmd;
DestroyWindow();
((CItemData*)this->m_pParentWnd)->m_cmd = NULL;


第2处,ReleaseBuffer():
(一)
void CStringToTransform::CStringToChar(CString str,char* w)
{
        int len = WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);
        WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),w,len,NULL,NULL);
        w[len] = '\0';
}

........
........
CString str;
GetDlgItem(IDC_EDIT2)->GetWindowTextW(str);

CMD cmd;
memset(&cmd,0,sizeof(CMD));
memset(&msg,0,sizeof(MSGINFO));
m_str.CStringToChar(str,cmd.command);
if(strcmp(cmd.command,"exit")==0)
{
      SendMessageW(WM_CLOSE,0,0);
      return TRUE;
}
msg.Msg_id = COMMAND;
strcat_s((char*)cmd.command,sizeof(cmd.command),"\r\n");
memcpy(msg.context,&cmd,sizeof(CMD));
m_Mysock.SendCommand(m_sock,(char*)&msg,sizeof(msg));
GetDlgItem(IDC_EDIT2)->SetWindowTextW(_T(""));
str.ReleaseBuffer();//6.请问这里为何要调用ReleaseBuffer(),即使上面调用了CStringToChar()函数,其函数也就是调用了GetLength()函数
............
............




上一篇:关于VS的问题,有时候明明定义了变量,但在调试窗口还是说你没定义。。。
下一篇:急需要一个win7系统64位的vc6 C++软件谢谢
96_avatar_middle
ico_lz  楼主| 发表于 2015-9-4 22:09:09 | 显示全部楼层
红色部分为方便大家查找。
51_avatar_middle
online_admins 发表于 2015-9-5 21:24:08 | 显示全部楼层
远控教程中确实有很多代码存在隐患,楼主指出的这几点都有道理
所以,这块一直想出个教程来修正远控代码中的各个问题点
44_avatar_middle
online_vip 发表于 2015-9-11 15:25:34 | 显示全部楼层
第一次见得那么COOL
43_avatar_middle
online_vip 发表于 2016-1-8 15:53:10 | 显示全部楼层
使用完指针是不是应该先delete,然后给指针赋值NULL?
08_avatar_middle
online_vip 发表于 2017-3-10 17:00:10 | 显示全部楼层
jiefan 发表于 2016-1-8 15:53
使用完指针是不是应该先delete,然后给指针赋值NULL?

是这样吧
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-6-19 20:08

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表