Delphi 如何修复UxTheme中的延迟声明

Delphi 如何修复UxTheme中的延迟声明,delphi,function,loading,delay,uxtheme,Delphi,Function,Loading,Delay,Uxtheme,在delphixeuxtheme单元中,有以下声明 function DrawThemeTextEx(hTheme: HTHEME; hdc: HDC; iPartId: Integer; iStateId: Integer; pszText: LPCWSTR; cchText: Integer; dwTextFlags: DWORD; pRect: PRect; var pOptions: TDTTOpts): HResult; stdcall; external themel

在delphixeuxtheme单元中,有以下声明

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中没有此功能(使用来自的dllexp.exe进行检查)

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

Project mtgstudio.exe raised exception class EExternalException 
with message 'External exception C0FB007F'.
JVCL也遇到了这个问题,但根据

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


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

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

delayed关键字的全部目的是让希望利用较新API函数的开发人员能够轻松地使用此类函数。但要做到这一点,开发人员通常还必须为较旧的操作系统版本提供回退实现,而DevExpress似乎没有做到这一点

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


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

也为JVCL报道了类似的延迟问题,Andy的博客文章也报道了这一问题,似乎非常清楚地解释了问题(以及如何修复)。然后,您可以通过将DevEx组件的代码更改为使用Jvcl版本而不是普通的UxTheme来修复它们(直到它们修复为止)。@Ken为什么不回答这个问题呢@mj2008:我认为它没有提供足够的细节来作为答案