2011-08-23 3 views
2

В блоке Delphi XE UXTheme есть следующее объявлениеКак исправить отсроченное заявление в 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; 

My 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.

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

+0

Также сообщается о JVCL по адресу http://issuetracker.delphi-jedi.org/view.php?id=4934 –

+0

Аналогичный задержанный вопрос также представлен в http://embarcadero.newsgroups.archived.at/public.delphi. language.delphi.win32/200906/0906224130.html –

+0

Сообщение блога Энди, похоже, очень ясно объясняет проблему (и как ее исправить). Затем вы можете исправить компоненты DevEx (до тех пор, пока они это сделают), изменив их код, чтобы использовать версию Jvcl вместо обычного UxTheme. –

ответ

6

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

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

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

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