Как исправить задержку объявления в UxTheme - PullRequest
2 голосов
/ 23 августа 2011

В модуле Delphi XE UxTheme есть следующее объявление

function DrawThemeTextEx(hTheme: HTHEME; hdc: HDC; iPartId: Integer;  iStateId: Integer;
  pszText: LPCWSTR; cchText: Integer; dwTextFlags: DWORD; pRect: PRect;
  var pOptions: TDTTOpts): HResult; stdcall; 
  external themelib name 'DrawThemeTextEx' delayed;

Моя Windows XP Professional с пакетом обновления 3 не имеет такой функции в файле uxtheme.dll (проверено с помощью dllexp.exe из http://www.nirsoft.net/utils/dll_export_viewer.html)

Похоже, что мое приложение задерживает загрузку процедуры и завершает работу во время выполнения со следующей ошибкой:

Project mtgstudio.exe raised exception class EExternalException 
with message 'External exception C0FB007F'.

Эта проблема также встречалась в JVCL, но решалась там согласно http://andy.jgknet.de/blog/2009/09/once-upon-a-delayed-jvcl-time/

Мне нужно исправить UxTheme, потому что они также используются компонентами DevExpress.

Есть ли способ исправить / исправить объявление DrawxmemeTextEx UxTheme.pas, чтобы оно не задерживалось?

1 Ответ

6 голосов
/ 23 августа 2011

Фундаментальная проблема заключается в том, что этот API был представлен в Vista и недоступен в XP.

Весь смысл ключевого слова с задержкой состоит в том, чтобы сделать функции, подобные этой, доступными для разработчиков, которые хотятвоспользоваться новыми функциями API.Но для этого разработчик, как правило, должен также предоставить запасные реализации для более старых версий ОС, чего, как представляется, DevExpress не смог сделать.

Следовательно, ошибка не в UxTheme.pas, а в компоненте DevExpress, который вызывает API, который не реализован на платформе.Исправление состоит в том, чтобы переработать код DevExpress, чтобы избежать вызова этого API в XP.

Я предлагаю вам связаться с DevExpress, который, вполне вероятно, уже имеет исправление в своих последних версиях.

...