投稿者「雷神轟」のアーカイブ

Windows Updateの問題に対する対応について(追加情報2026年4月15日)

crtdll.dll が _fmode_dll などのエントリが削除され、Free Pascalコンパイラに同梱されている古い32bitの「gcc.exe」が動作しなくなり、それを呼び出している「windres.exe」も動作しなくなったためにリソース(.rcファイル)のコンパイルができなくなりました。

ところが、本日(2026年4月15日)、Windows Updateで「2026-04 セキュリティ パッチ (KB5083769) (26200.8246)」を適用したところ、「crtdll.dll」がロールバックされて元に戻りました。非互換の問題が大きくて戻すことになったのでしょうか?

OK:Windowsバージョン:25H2 ビルド:26200.8039 – 「crtdll.dll」(サイズ:149,019)
NG:Windowsバージョン:25H2 ビルド:26200.8117 – 「crtdll.dll」(サイズ: 60,928)
OK:Windowsバージョン:25H2 ビルド:26200.8246 – 「crtdll.dll」(サイズ:149,019) <= 今回、元に戻った。

これにより、Free Pascal同梱の古い「gcc.exe」が再び動作するようになりました。
fpc コンパイラに「TDM-GCC」の「windres.exe」を呼び出すパラメータを付けたコマンドスクリプト[コマンドスクリプト(その2)]はそのまま継続使用可能です。
今回「crtdll.dll」が戻されましたが、今後再び同様なことが起きる可能性も否定できないので注意してください。

Lazarus 4.6 がリリースされました。

2026年2月25日 Lazarus 4.6 がリリースされました。バグフィックスリリースです。

同梱されているFree Pascalは 3.2.2 です。

Pascal 日和 ホームページ のLazarus関連の手順(Winodws)は Lazarus 4.x に対応しています。

Windows Updateの問題に対する対応について(2026年4月)

Object Pascal 備忘録」でWindowsリソースを使用する例を作成しましたが、Windows Update [2026-03 パッチ (KB5086672) (26200.8117)] ,を適用したところコンパイルがエラーになりました。エラーになったのはObject Pascalソース中に {$R VerInfo.rc} などリソーススクリプトを使用したもで、リソースのコンパイルがエラーとなりました。
Pascal 日和 ホームページ」で対応を作成しましたので報告します。

【問題】
Windows Updateで 「crtdll.dll」(C Runtime Library)の内容が変更され「_fmode_dll」エントリなどが廃止されました。これにより古い「gcc.exe」などが例外が発生し実行できなくなり、「gcc.exe」を呼び出す「windres.exe」も実行できなくなりました。これはバグではなくそういう方針のようです。
Free Pascal 3.2.2に同梱の「gcc.exe」は古いのでこの問題に該当します。そのため、fpc コンパイラでリソーススクリプト(*.rc)のコンパイルができなくなりました。
私が確認したところ、Windows Update「2026-03 パッチ (KB5086672) (26200.8117)」適用から動作しなくなりました。
OK:Windowsバージョン:25H2 ビルド:26200.8039 – 「crtdll.dll」(サイズ:149,019)
NG:Windowsバージョン:25H2 ビルド:26200.8117 – 「crtdll.dll」(サイズ:: 60,928)

【対応】
「TDM-GCC」では、新しい「gcc.exe」が採用されているため「crtdll.dll」に依存せず Windows Update 適用後も「gcc.exe」が動作します。「windres.exe」も動作します。
そのため、 fpc コンパイラに「TDM-GCC」の「windres.exe」を呼び出すパラメータを付けたコマンドスクリプト[コマンドスクリプト(その2)]を作成しました。
{$Rxxx.rc} を設定しているプログラムのコンパイルは[コマンドスクリプト(その2)]を使用してください。リソーススクリプトがなくても使用できます。
事前に「TDM-GCC インストール」を実行してください。この手順でインストールされた環境を前提としています。

ダウンロードも追加しました。「Free Pascal関連ダウンロード」の[Free Pascal用のコマンドスクリプト(その2)]です。

※ 「crtdll.dll」はWindows 11 64bit版の場合「C:\Windows\SysWOW64\crtdll.dll」にあります。32bit DLLです。

Object Pascal 備忘録の「バージョン情報を設定する」を修正しました。

バージョン情報を設定する」をちょっとだけ修正しました。

バージョン情報リソースファイルの例 : VerInfo.rc について、
60行目を「FILETYPE VFT_APP」から「FILETYPE VER_FILETYPE」に修正しました。
38行目で「#define VER_FILETYPE VFT_APP」で定義されているためです。
元のままでも問題ありませんが機会があれば修正してください。
DLL用にするには38行目の「VFT_APP」を「VFT_DLL」にしてください。

備忘録インデックス」のダウンロードファイルも「DM0004A.zip」から「DM0004B.zip」に更新しました。

Pascal 日和 ホームページの「Object Pascal 備忘録」を修正しました。

型付き定数に代入できなくする設定と、コンパイラが実数のリテラルや型指定のない定数に型を割り当てるときにすべてDouble型を選択する設定に対応するため、以下の修正を行いました。

・「Free Pascal メモ」メニューの「Object Pascal 備忘録」の各ページのプログラムにディレクティブ「{$J-}」と「{$MINFPCONSTPREC 64}」を追加しました。
 「ひな型を用意する(EXE編)」と「ひな型を用意する(DLL編)」ページにディレクティブ「{$J-}」と「{$MINFPCONSTPREC 64}」の説明を追記しました。
・「Free Pascal メモ」メニューの「Object Pascal 備忘録」ページのダウンロードファイルにディレクティブ「{$J-}」と「{$MINFPCONSTPREC 64}を追加しました。
 「DM0002.zip」を「DM0002A.zip」に差し替えました。
 「DM0003.zip」を「DM0003A.zip」に差し替えました。
 「DM0004.zip」を「DM0004A.zip」に差し替えました。
 「DM0005.zip」を「DM0005A.zip」に差し替えました。
 「DM0006.zip」を「DM0006A.zip」に差し替えました。

Object Pascal 入門の「実数型」ページに加筆しました。そして...

Pascal 日和 ホームページの「Object Pascal入門-実数型」に実数型の内部表現や実数リテラルの型の選択ルールについて説明を追加しました。

実数リテラルの型の選択については計算処理を重視する方にとっては重要な問題だと思います。Free PascalやLazarusを長年使用してきましたが、こういう仕様になっているとは最近まで気が付きませんでした。うかつと言わざるを得ません。最初はコンパイラのバグかと思いましたが、調べたところ対応するディレクティブやコマンドライン コンパイラオプションが存在するので仕様で間違いないようです。
Free Pascal 3.2.2 のデフォルトでは、1.0 / 3.0 が 0.333333343267441 とSingle型の結果となってしまいます。開発版の FPC 3.3.1 でも同じなので、次リリースも変わらないと思われます。
是非一読ください。

Embarcadero Delphiでも確認しましたが、DelphiはデフォルトでDouble型で計算しています。

コンパイラディレクティブ「{$MINFPCONSTPREC 64}」についてはObject Pascal 備忘録のひな型ソースにも追加の検討をします。

「超力招来の備忘録」の投稿を移設しました(その4/最後)

はてなブログで自分が用意したSyntax Highlighterが動作しなくなったため、
「超力招来の備忘録」の投稿を「Pascal 日和 ホームページ」へ移設しました。
今回は以下の1件(最後)。

Free Pascal(Object Pascal) : アプリケーション(EXE)内の実行順序 – 超力招来の備忘録
⇒  Pascal 日和 ホームページ – アプリ(EXE)内の実行順序

Pascal 日和 ホームページの「Object Pascal 備忘録」ページにダウンロードも追加しました。

  • 「アプリ(EXE)内の実行順序」用の「DM0006.zip」。