2

在 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;

我的带有 SP3 的 Windows XP Professional 在 uxtheme.dll 中没有这样的功能(使用http://www.nirsoft.net/utils/dll_export_viewer.html中的 dllexp.exe 检查)

似乎我的应用程序确实延迟加载过程并且运行时失败并出现以下错误:

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 声明为非延迟?

4

1 回答 1

6

根本问题是这个 API 是在 Vista 中引入的,在 XP 中不可用。

delay 关键字的全部意义在于让想要利用较新 API 函数的开发人员可以轻松使用此类函数。但要做到这一点,开发人员通常还必须为较旧的操作系统版本提供后备实现,而 DevExpress 似乎未能做到这一点。

因此,该错误不在 UxTheme.pas 中,而是在调用未在平台上实现的 API 的 DevExpress 组件中。解决方法是重新编写 DevExpress 代码以避免在 XP 上调用此 API。

我建议您联系 DevExpress,他们很可能已经在其最新版本中进行了修复。

于 2011-08-23T13:26:04.037 回答