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