如何在UxTheme中修复延迟声明

Ive*_*aev 2 delphi function loading delay uxtheme

在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;
Run Code Online (Sandbox Code Playgroud)

我的带有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'.
Run Code Online (Sandbox Code Playgroud)

JVCL也遇到了这个问题,但根据http://andy.jgknet.de/blog/2009/09/once-upon-a-delayed-jvcl-time/解决了这个问题.

我需要修复UxTheme,因为它们也被DevExpress组件使用.

有没有办法修补/修复UxTheme.pas DrawThemeTextEx声明没有延迟?

Dav*_*nan 6

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

延迟关键字的重点是允许想要利用更新API函数的开发人员轻松使用这样的函数.但要做到这一点,开发人员通常还必须为较旧的OS版本提供回退实现,DevExpress似乎没有做到.

因此,该错误不在UxTheme.pas中,而是在调用未在平台上实现的API的DevExpress组件中.修复是重新使用DevExpress代码以避免在XP上调用此API.

我建议你联系DevExpress,他们很可能已经修复了他们的最新版本.