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/ に従って解決されました。

DevExpress コンポーネントでも使用されているため、UxTheme を修正する必要があります。

UxTheme.pas DrawThemeTextEx 宣言を遅延しないようにパッチ/修正する方法はありますか?

4

1 に答える 1

6

根本的な問題は、この API が Vista で導入され、XP では使用できないことです。

delayed キーワードの要点は、新しい API 関数を利用したい開発者がこのような関数を簡単に利用できるようにすることです。ただし、そうするために、開発者は通常、古い OS バージョンのフォールバック実装も提供する必要がありますが、DevExpress はこれを行っていないようです。

したがって、バグは UxTheme.pas ではなく、プラットフォームに実装されていない API を呼び出す DevExpress コンポーネントにあります。この修正は、XP でこの API を呼び出さないように DevExpress コードを作り直すことです。

最新バージョンですでに修正されている可能性が高い DevExpress に連絡することをお勧めします。

于 2011-08-23T13:26:04.037 に答える