我刚开始定义的是CString的变量,然后在构造函数中初始化
tip=_T("");
写代码:
void CGetTickCountDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
DWORD dwTime=GetTickCount();
d=dwTime/(24*60*60*1000);
dwTime%=24*60*60*1000;
//切割小时数
h = dwTime/3600/1000;
dwTime %=3600*1000;
//切割分钟数
m = dwTime /60/1000;
dwTime %=60*1000;
//切割秒数和毫秒数
s = dwTime/1000;
ms = dwTime%1000;
wsprintf(tip.AllocSysString(),_T("已开机:%d天%d小时%d分%d秒%d"),d,h,m,s,ms);
Invalidate();
CDialogEx::OnTimer(nIDEvent);
}
后来我想应该是AllocSysString函数的释放问题,就调用了::SysFreeString函数,最后还是装逼失败,就跑去研究了一下wsprintf函数,后来就换了一下,没有调用CString变量来存储,而是LPWSTR变量,后来又不行,又报错,在研究了一下发现是内存区的问题,于是我在构造函数中定义了1024大小的内存:
tip=new TCHAR[1024];(注意tip是LPWSTR类型)
运行了成功了。其实如果使用win32来写,很容易避免这样的问题,在MFC中,变量是在头文件中定义,初始化是在构造函数中实现,相对于win32来讲,所有的代码都是写在一个文件里面,变量定义,初始化,都在一个文件,因此不容易出错,但MFC的话,就容易出问题了。