在我的FMX Windows应用程序启动期间,一小部分用户报告了访问冲突错误。我自己无法复制它,但我通过向用户发送变体确定了一些事情。以下是事实。
- 绝大多数用户没有这个问题
- 所有遇到此问题的用户都具有看起来像正常Windows 10设置的功能
- 该错误发生在创建窗体之后,但在开始调用每个窗体的OnCreate事件之前。可能是在Application.Run的早期。
- 该错误不会发生在 Delphi 10.4中构建的我的应用程序的早期版本。
- 使用Windows XP兼容模式运行时不会出现此错误。这很奇怪,因为我认为FMX应用程序根本无法在Windows XP中运行。
- 我正在使用一个第三方组件(FFVCL),但另一个应用程序使用该组件和内置在 Delphi 11中不会导致错误。
有没有人知道 Delphi 11.0的问题可能导致这个问题?升级到11.2对我有帮助吗?如果没有,有人能提出进一步调查的建议吗?为什么一些应用程序在同一版本中构建时可以工作,而这个不能?为什么它在Windows XP兼容模式下工作?
更新:更新到Rad Studio 11.2后,这些用户仍然存在该问题。
更新2:在添加调用堆栈日志记录后,我确定错误发生在FMX.Forms TFormBorder.GetSupported中。该问题可能与自定义样式有关,我在某些表单上使用了自定义样式。以前也问过类似的问题。
App produces an exception on target computers
我假定在Windows XP兼容模式下不会发生该错误,因为我只为Win10和Win7设置了自定义样式。我仍然不明白为什么只有少数用户会发生这种情况,或者为什么当我从D10更新到D11时,这会成为一个问题。
1条答案
按热度按时间ttp71kqs1#
这个问题现在已经得到了Embarcadero的支持团队的解决。这个问题发生在使用旧版本Windows 10的用户身上。报告错误的用户已经多年没有安装任何Windows 10更新了! Delphi 11中添加的与菜单项相关的新DPI代码调用了早期版本Windows 10中不存在的Windows 10函数,因此导致了错误。修复方法是将FMX.Helpers.Win.pas的第297行修改为以下内容。
已报告此问题,以便在将来的更新中永久修复。