LoadFrame(MFC)仅在澳大利亚失败

时间:2016-03-25 14:39:31

标签: c++ windows visual-studio-2010 mfc

我们的团队有一个让我们难过的错误。

以下代码返回false:

    CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
{
    AfxMessageBox(GetStr(IDS_MAINFRM_FAIL_TO_LOAD));
    ASSERT(FALSE);
    return FALSE;
}

我们正在使用VS2010进行编译,我们确实安装了RogueWave Stingray组件。 CMainFrame是一个CBCGPMDIFrameWnd,它基于CMDIFrameWnd并由BCGSoft生成。

我们的软件在全球约100台机器上运行,没有任何问题。它运行在Windows 7-10 x86& 64。它一直有效,直到本周。澳大利亚米尔杜拉的一小群人报告了一个问题。对于所有这些,运行WIN7x86Enterprise和Win10x64Home,上面的代码片段返回false。我亲自检查了他们的一台机器(Win10x64Home),一切似乎都井井有条。

我已经为项目尝试了deleting the RES and APS files。那没有用。

有谁知道问题可能是什么?我接受过有根据的猜测。

提前致谢!

PS:新信息: 它看起来像是一个时间问题。在计算机上,UTC +失败,UTC0& UTC-通过。我们不确定为什么。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

我们在使用纪元作为起点的经过时间戳上进行TimeDate计算。 MFC不允许在纪元之前的日期,因此所有UTC +都无法创建日期。此错误已得到修复。谢谢大家。

以下是导致问题的代码(已修复)。我们增加了一天的工作时间。 CTime :: CTime(1970,1,1,0,0,0)w / UTC +,在1970年1月1日之前在伦敦拍摄,失败了。

谢谢!

CTime t1 = CTime::CTime(yearInt,monthInt,dayInt,0,0,0);
CTime t2 = CTime::CTime(1970,1,2,0,0,0);
CTimeSpan timeSpan = t1-t2;
versionDate = timeSpan.GetDays() + 1;