Использование стилей VCL в DLL вызывает системное исключение в 10.2 Токио - PullRequest
0 голосов
/ 17 июня 2019

Приложение, изначально написанное на XE2, которое использует стили внутри DLL, так что формы, которые всплывают из DLL, имеют тот же стиль, что и EXE, при обновлении для сборки в 10.2 Токио теперь вызывает системные исключения при открытии определенных форм из EXE, или при закрытии определенных форм в EXE.

1 Ответ

0 голосов
/ 17 июня 2019

Мне не нужно включать минимальный воспроизводимый пример в этот вопрос, потому что у меня есть ответ, который кто-то еще мог бы добавить к моему первоначальному вопросу, если бы он не был закрыт так быстро , а затем не открывался повторно даже после внесения его по теме.

Оказывается, это проблема поведения в VCL:

Исключение при использовании комбинированных списков в форме, которая находится в DLL и использует VCLStyles.

Embarcadero не исправит это, поскольку это не «проблема»,

R & D пишет, что в приложении должен быть включен менеджер стилей и может быть только один TStyleManager с включенными системными хуками (Свойство TStyleManager.SystemHooks), потому что оно обрабатывает все окна из приложения. Текущая система не поддерживает сценарий, который вы предлагают, и в настоящее время нет плана переделать его

но есть обходной путь, который заключается в добавлении следующей строки кода непосредственно перед вызовом SetStyle или TrySetStyle в коде DLL:

TStyleManager.SystemHooks := [];

Надеюсь, это поможет разработчикам Delphi, столкнувшимся с этой досадной проблемой после обновления до более новых версий.

В моем случае я добавляю в проект условное определение для библиотек, затем добавляю этот код в те места, где он устанавливает стили, так как один и тот же модуль включен как в EXE, так и в DLL:

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