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

ASSERT(:IsWindow(m_hWnd))解决办法

2012-08-13 
ASSERT(::IsWindow(m_hWnd))我在对话框界面上建了一个TEXT控件,可每次一执行到ASSERT(::IsWindow(m_hWnd))

ASSERT(::IsWindow(m_hWnd))
我在对话框界面上建了一个TEXT控件,可每次一执行到ASSERT(::IsWindow(m_hWnd));就出现Access Violationg.怎么回事呢?
具体如下:
我新建了一基于CWnd的类,在这个类中调用另一个类(基于CDialog)中的函数,即((CClientDlg*)wavedlg)->GetPort(2);函数定义如下:
u_short CClientDlg::GetPort(int pt)
{
int nPort;
  if(pt==0)//数据端口
{
GetDlgItem(IDC_DATAPORT)->GetWindowText(m_dataport);
  nPort = atoi(m_dataport);
if(nPort < 1 || nPort > 65535)
{
MessageBox("端口号错误!");
return 0;
}
return nPort;
}
if(pt==1) //视频端口
{
GetDlgItem(IDC_VIDEOPORT)->GetWindowText(m_videoport);
nPort=atoi(m_videoport);
if(nPort < 1 || nPort > 65535)
{
MessageBox("端口号错误!");
return 0;
}
return nPort;
}
if(pt==2) //语音端口
{
GetDlgItem(IDC_WAVEPORT)->GetWindowText(m_waveport);
nPort=atoi(m_waveport);
if(nPort < 1 || nPort > 65535)
{
MessageBox("端口号错误!");
return 0;
}
return nPort;
}
else return 0;
}
调试的话就会在这里出问题。

[解决办法]
ASSERT(::IsWindow(m_hWnd))

控件还不是一个窗口。创建并显示了吗?
[解决办法]
可能:
1.没有创建(没有初始化好或者根本没有初始化);
2.已经创建的窗口已经销毁;
3.由于其他地方数据越界修改了数据;

自己跟踪一下句柄的值,调用前先拦截判断看看。

[解决办法]
你不会在别的地方创建(New & Create)的CClientDlg对象吧?
在CWnd的类只声明了CClientDlg* 类型指针wavedlg就这么使用了?

呵呵
[解决办法]
应该是对象已经不存在了,搂主慢慢找一找!

热点排行