最新のWindows環境(Windows 11を含む)でのDelphi 2007における「SetThreadContext failed」アサーション失敗の修正方法
このエラーに関する情報は、Stack Overflow などのフォーラムですでにたくさん共有されていますが、それらのほとんどが古いバージョンの Windows について説明しています。それらの記事の情報は今でも有効ですが、記事が古すぎるため、その解決方法を試すことを躊躇される方もいらっしゃるかもしれません。この記事を書いた主な理由は、2020 年代にレガシーな Delphi アプリケーションの保守を行っている方々に向けて、「はい、この修正方法は Windows 11 でも有効です」ということを伝えるためです。
最新の Windows 環境で Delphi 2007 を使用している場合、VCL Forms アプリケーションを閉じる際に次のエラーが発生することがあります。..\win32src\thread32.cpp の 412 行目で「SetThreadContext failed」というアサーション失敗が表示されます。
幸いなことに、この問題には簡単な解決方法があります。この問題は、Delphi 2007 に同梱されている古いバージョンの bordbk105N.dll が原因で発生します。解決するには、このファイルを最新バージョンに置き換える必要があります。
以下が具体的な手順です:
-
まず、Embarcadero のウェブサイトから最新バージョンの bordbk105N.dll をダウンロードします:https://cc.embarcadero.com/item/27521 このファイルは当初 Windows 7 向けの修正として公開されましたが、Windows 11 でも問題なく動作します。
-
Delphi 2007 のインストールフォルダを見つけます。デフォルトのインストール先は通常 C:\Program Files (x86)\CodeGear\RAD Studio\5.0 です。
-
Delphi 2007 のインストールフォルダ内にある bin フォルダに移動します。
-
既存の bordbk105N.dll ファイルを見つけ、バックアップコピーを作成します(例:bordbk105N.dll.bak)。変更を元に戻す必要がある場合に備えて、この手順は重要です。
-
既存の bordbk105N.dll ファイルを、先ほどダウンロードした最新バージョンのファイルで置き換えます。
-
Delphi 2007 の IDE を再起動し、VCL Forms アプリケーションを再度実行してみてください。
以上です!これで VCL Forms アプリケーションを閉じる際に「SetThreadContext failed」アサーション失敗が発生しなくなるはずです。
この記事は元々 dev.to に掲載されています。