LoadFrame (MFC) 仅在澳大利亚失败
Posted
技术标签:
【中文标题】LoadFrame (MFC) 仅在澳大利亚失败【英文标题】:LoadFrame (MFC) failing only in Australia 【发布时间】:2016-03-25 14:39:30 【问题描述】:我们的团队遇到了一个困扰我们的错误。
以下代码返回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 和 x64 上运行。它一直有效,直到本周。澳大利亚米尔杜拉的一小群人报告了一个问题。对于所有这些,运行 WIN7x86Enterprise 和 Win10x64Home,上面的代码 sn -p 返回 false。我亲自检查了他们的一台机器(Win10x64Home),一切似乎都井然有序。
我已经为该项目尝试了deleting the RES and APS files。这没有帮助。
有谁知道可能是什么问题?我愿意接受有根据的猜测。
提前致谢!
PS:新信息: 看起来是时间问题。在计算机上,一切 UTC+ 都失败了,而 UTC0 和 UTC- 通过了。我们不确定为什么。任何帮助,将不胜感激。谢谢!
【问题讨论】:
在LoadFrame
之前添加m_pMainWnd = pMainFrame;
(我假设你在CWinApp::InitInstance
中
随机想法:更改 aus 外部计算机上的时区和本地化(语言等)设置以匹配内部计算机,反之亦然。使用 *** 使非澳大利亚计算机在澳大利亚计算机网络上,反之亦然。
@BarmakShemirani:我正在尝试您的建议。我会回来报告的。
@Yakk:我也会试试你的建议。
@Yakk:我将开发机器上的所有设置都更改为澳大利亚,我们的应用程序运行良好,但 Visual Studio 搞砸了一些可怕的事情。你可能正在做某事。
【参考方案1】:
我们以历元为起点对经过的时间戳进行 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;
【讨论】:
答案还不清楚。使用了哪些类型的计算? COleDateTime“几乎”允许一切;) @xMRi:你喜欢这个新答案吗? 我在选定数量的机器(包括澳大利亚在内的不同时区的所有 Windows 10)上遇到了 LoadFrame 失败的类似问题。 UTC+ 问题如何/为什么在 LoadFrame 中显示出来? 我在加载帧期间调用了 CTime()。问题是时间在纪元之前,这是 CTime 不允许的。如果您可以更具体一些,我可以为您提供更多帮助。 @DanG 谢谢。好吧,这不是我的问题,所以...我已将其追踪到 DockingManager 的注册表项。一旦他们删除应用程序启动没有问题。这是一个非常奇怪的问题,与你的不同。当我知道更多时,我可能会正式提出一个问题。再次感谢!以上是关于LoadFrame (MFC) 仅在澳大利亚失败的主要内容,如果未能解决你的问题,请参考以下文章