关于WinCE Release版本程序SetLocalTime失败问题

=============================================================

标题:关于WinCE Release版本程序SetLocalTime失败问题

备注:wince6 + vs2005

日期:2011.6.14

姓名:朱铭雷

=============================================================

// 设置系统日期 void CCalrDlg::OnBnClickedBtnUse() { SYSTEMTIME smCurSel, smCurTime, smSetTime; m_MCC.GetCurSel(&smCurSel); GetLocalTime(&smCurTime); smSetTime.wYear = smCurSel.wYear; smSetTime.wMonth = smCurSel.wMonth; smSetTime.wDay = smCurSel.wDay; smSetTime.wHour = smCurTime.wHour; smSetTime.wMinute = smCurTime.wMinute; smSetTime.wSecond = smCurTime.wSecond; SetLocalTime(&smSetTime); m_MCC.SetToday(smSetTime); }

这段代码在Debug版本下没有什么问题,能够成功设置时间。但在Release版本时,就会出问题。刚开始以为是其他地方出了问题,后来发现是SetLocalTime调用失败,通过GetLastError返回错误代码是87,代表是参数无效。后来设个断点,发现smSetTime的毫秒成员wMilliseconds的值是个5位数了,参数无效也就说的是它了。

// 设置系统日期 void CCalrDlg::OnBnClickedBtnUse() { SYSTEMTIME smCurSel, smCurTime, smSetTime; m_MCC.GetCurSel(&smCurSel); GetLocalTime(&smCurTime); smSetTime.wYear = smCurSel.wYear; smSetTime.wMonth = smCurSel.wMonth; smSetTime.wDay = smCurSel.wDay; smSetTime.wHour = smCurTime.wHour; smSetTime.wMinute = smCurTime.wMinute; smSetTime.wSecond = smCurTime.wSecond; smSetTime.wMilliseconds = 0; SetLocalTime(&smSetTime); m_MCC.SetToday(smSetTime); }

wMilliseconds赋值为0,则SetLocalTime调用成功了。其实如果保持一个良好的编程习惯,在变量定义的时候就初始化一下,这个问题就可以避免了。

// 设置系统日期 void CCalrDlg::OnBnClickedBtnUse() { SYSTEMTIME smCurSel = {0}, smCurTime = {0}, smSetTime = {0}; m_MCC.GetCurSel(&smCurSel); GetLocalTime(&smCurTime); smSetTime.wYear = smCurSel.wYear; smSetTime.wMonth = smCurSel.wMonth; smSetTime.wDay = smCurSel.wDay; smSetTime.wHour = smCurTime.wHour; smSetTime.wMinute = smCurTime.wMinute; smSetTime.wSecond = smCurTime.wSecond; SetLocalTime(&smSetTime); m_MCC.SetToday(smSetTime); }

Release版本的程序比Debug版本要求的确严格很多。

 

你可能感兴趣的:(wince应用程序)