LoadFrame(MFC)仅在澳大利亚出现故障

LoadFrame (MFC) failing only in Australia

本文关键字:澳大利亚 故障 MFC LoadFrame      更新时间:2023-10-16

我们的团队有一个困扰我们的错误。

以下代码返回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是基于CMDIFrameWnd并由BCGSoft制作的CBCGPMDIFrameWnd。

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

我已经尝试删除该项目的RES和APS文件。那也无济于事。

有人知道问题出在哪里吗?我愿意接受有根据的猜测。

提前感谢!

PS:新信息:这看起来是个时间问题。在计算机上,所有UTC+都失败了,并且UTC0&UTC-通过。我们不确定原因。如有任何帮助,我们将不胜感激。谢谢

我们使用epoch作为起点,对经过的时间戳进行TimeDate计算MFC不允许日期早于epoch,因此所有UTC+都无法创建日期。此错误已修复。谢谢大家。

这是导致问题的代码(已修复)。我们增加了一天的工作时间,使一切正常。CTime::CTime(1970,1,1,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;