【问题标题】:How to fix a delayed declaration in UxTheme如何修复 UxTheme 中的延迟声明
【发布时间】:2011-11-01 21:37:43
【问题描述】:

在 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 声明以不延迟?

【问题讨论】:

  • embarcadero.newsgroups.archived.at/…也报告了类似的延迟问题
  • Andy 的博文似乎非常清楚地解释了这个问题(以及如何解决它)。然后,您可以通过更改它们的代码以使用 Jvcl 版本而不是普通的 UxTheme 来修复 DevEx 组件(直到它们这样做)。
  • @Ken 为什么不回答这个问题!
  • @mj2008:我认为它没有提供足够的细节来使其成为答案。 :)

标签: delphi function loading delay uxtheme


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2021-04-29
    • 2019-06-12
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多