BDE を使っている場合で、充分にディスク容量が残っているにもかかわらず "Insufficient disk space (ディスク容量不足)" のエラーが出る問題を回避します。
[Patch for BDE 'Insufficient disk space' problem]
http://cc.embarcadero.com/item/21475
「出た事ないから俺関係ねーわ」
ほーう。コレが出る理屈を知ってもそういう事が言えるかな?
BDE は空き容量の取得に GetDiskFreeSpaceA() API を使っています。
[GetDiskFreeSpace() API]
http://msdn.microsoft.com/ja-jp/library/cc429305.aspx
2GB 超でおかしくなる…それは Windows 95 (OSR2) 以前の話です。そうではなくて、恐らく BDE は算出された空きディスク容量を DWORD の変数に格納しています。
BDE が認識する空き容量 = 実空き容量 mod MAX_UINT
なので、4.01 GB の空き容量があったとすると、BDE が認識する空き容量は 0.01 GB なのです。"Insufficient disk space" のエラーはこうして発生します。"Patch for BDE 'Insufficient disk space' problem" は GetDiskFreeSpaceA() を別関数にリダイレクトして、充分な空き容量があるようにみせかけています。
"Patch for BDE 'Insufficient disk space' problem" を組み込むのは簡単で、ロジックをいじる必要は全くありません。
1.アーカイブを解凍したら、その中にある 2 つのファイルをプロジェクトフォルダにコピーする 1.プロジェクトファイルの uses 節に "FixBDE4GbBug" を追加する 3.アプリケーションを配布する際には "FIX4GBug.dll" も配布する。
この記事を読んで血の気が引いた方は、即刻作業するか、お客さんトコで問題が出ない事を祈ってくださいねー…(´ー`)y-~~
|