最新のWindows環境(Windows 11を含む)でのDelphi 2007における「SetThreadContext failed」アサーション失敗の修正方法

最新のWindows環境(Windows 11を含む)でのDelphi 2007における「SetThreadContext failed」アサーション失敗の修正方法

Michael Charles Aubrey // Thu Apr 13 2023

このエラーに関する情報は、Stack Overflowなどのフォーラムですでにたくさん共有されていますが、それらのほとんどが古いバージョンのWindowsについて説明しています。それらの記事の情報は今でも有効ですが、記事が古すぎるため、その解決方法を試すことを躊躇される方もいらっしゃるかもしれません。この記事を書いた主な理由は、2020年代にレガシーなDelphiアプリケーションの保守を行っている方々に向けて、「はい、この修正方法はWindows 11でも有効です」ということを伝えるためです。

最新のWindows環境でDelphi 2007を使用している場合、VCL Formsアプリケーションを閉じる際に次のエラーが発生することがあります。..\win32src\thread32.cppの412行目で「SetThreadContext failed」というアサーション失敗が表示されます。

..in32srchread32.cppの412行目で「"(!SetThreadContext failed)"」というアサーション失敗。実行を続行しますか?

幸いなことに、この問題には簡単な解決方法があります。この問題は、Delphi 2007に同梱されている古いバージョンのbordbk105N.dllが原因で発生します。解決するには、このファイルを最新バージョンに置き換える必要があります。

以下が具体的な手順です:

  1. まず、Embarcaderoのウェブサイトから最新バージョンのbordbk105N.dllをダウンロードします:https://cc.embarcadero.com/item/27521 このファイルは当初Windows 7向けの修正として公開されましたが、Windows 11でも問題なく動作します。

  2. Delphi 2007のインストールフォルダを見つけます。デフォルトのインストール先は通常 C:\Program Files (x86)\CodeGear\RAD Studio\5.0 です。

  3. Delphi 2007のインストールフォルダ内にある bin フォルダに移動します。

  4. 既存のbordbk105N.dllファイルを見つけ、バックアップコピーを作成します(例:bordbk105N.dll.bak)。変更を元に戻す必要がある場合に備えて、この手順は重要です。

  5. 既存のbordbk105N.dllファイルを、先ほどダウンロードした最新バージョンのファイルで置き換えます。

  6. Delphi 2007のIDEを再起動し、VCL Formsアプリケーションを再度実行してみてください。

以上です!これでVCL Formsアプリケーションを閉じる際に「SetThreadContext failed」アサーション失敗が発生しなくなるはずです。

この記事は元々 dev.to に掲載されています。