在DLL中使用VCL样式会在10.2 Tokyo中导致系统异常

时间:2019-06-17 00:37:22

标签: delphi-10.2-tokyo vcl-styles

最初用XE2编写的应用程序,它使用DLL中的样式,以便从DLL弹出的窗体与EXE的样式相同,在更新为在10.2 Tokyo中生成时,现在从EXE打开某些窗体时会导致系统异常,或者在EXE中关闭某些表格时。

1 个答案:

答案 0 :(得分:0)

我不需要在这个问题中加入minimal reproducible example,因为我有一个答案,如果没有很快关闭,然后其他人就可以将其他人添加到我的原始问题中即使已成为主题,也可以重新打开。

原来是VCL中的行为问题:

Exception if using comboboxes in a form that resides in a DLL and that uses VCLStyles.

Embarcadero无法解决它,因为它不是一个“问题”,

  

R&D写道,必须在应用程序中启用样式管理器   并且只有一个启用了系统挂钩的TStyleManager   (TStyleManager.SystemHooks属性),因为它处理所有窗口   从应用程序。当前系统不支持您的方案   正在提示,目前没有计划对其进行返工

,但是有一种解决方法是在DLL代码中调用 SetStyle TrySetStyle 之前立即添加以下代码:

TStyleManager.SystemHooks := [];

希望这将对在升级到新版本后遇到此烦人问题的Delphi开发人员有所帮助。

对于我来说,我将条件定义添加到库的项目中,然后将此代码添加到设置样式的位置,因为EXE和DLL中都包含相同的单元:

{$IFDEF DLL}
  TStyleManager.SystemHooks := [];
{$ENDIF}