在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声明为非延迟的?
发布于 2011-08-23 21:26:04
根本问题是这个API是在Vista中引入的,在XP中不可用。
delayed关键字的全部目的是让想要利用较新API函数的开发人员可以轻松地使用这样的函数。但要做到这一点,开发人员通常还必须为较旧的操作系统版本提供后备实现,而DevExpress似乎未能做到这一点。
因此,错误不在UxTheme.pas中,而是在DevExpress组件中,该组件调用平台上未实现的API。修复方法是重新编写DevExpress代码,以避免在XP上调用此API。
我建议您联系DevExpress,他们很可能已经在其最新版本中获得了修复。
https://stackoverflow.com/questions/7160599
复制相似问题