Delphi 7 (7.1) を Windows 10 / 11 にインストールする

# はじめに
**Delphi 7** は 2002 年に Borland からリリースされました [^1]。

 - Win9x で動作する実質的な最終版
 - Delphi 2 ～ 6 までのコードがほぼそのまま動作
 - BDE に SQL-Link ドライバが付属
 - Windows XP 以降のテーマにも対応

上記理由により、今でもマイグレーションの中間ステップ用に使われる事が多いです。

Embarcadero 製品のインストーラ及びアップデータは同社のサイト

 - [登録製品ポータル](https://my.embarcadero.com/)
 - [登録ユーザダウンロード](https://cc.embarcadero.com/myreg)

いずれかからダウンロードできます。Delphi 7 は古い製品という事もあり、[登録製品ポータル](https://my.embarcadero.com/)からだとダウンロードできないアイテムがあるようです。

本記事は、各種ファイルを[登録ユーザダウンロード](https://cc.embarcadero.com/myreg)からダウンロードして Windows 10 /11 にインストールする手順となっています。

# ■ インストーラとアップデータとホットフィックス

## \#1 Delphi 7 ISO
セットアップ CD-ROM イメージファイル (ISO) です。

インストーラが自動起動した場合にはそれを閉じ、Explorer で **install\setup.exe** を右クリックしたら <font color="Crimson">\[管理者として実行\]</font> で開きます [^2]。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/29adb414-f7cd-d672-af82-def1caf74ebb.png)

インストール先も、デフォルトの `%ProgramFiles(x86)%\Borland\Delphi7\` ではなく、`C:\Embarcadero\Delphi7\` のような UAC の影響を受けない場所にインストールした方がトラブルは少ないと思います。

| ISO | Personal| Professional | Enterprise | Architect |
|:---|:---:|:---:|:---:|:---:|
| [ID: 28037, Delphi 7 Professional ISO - Japanese](https://cc.embarcadero.com/item/28037)  | × | 〇 | × | × |
| [ID: 28038, Delphi 7 Enterprise ISO - Japanese](https://cc.embarcadero.com/item/28038)  | × | × | 〇 | (〇) |

SKU によってダウンロードするファイルが違います。

※Delphi の最新バージョンを購入すると同グレードの旧バージョンが貰えるのですが、<font color="Crimson">Delphi 7 Architect は日本未発売</font>のため、最新バージョンの Architect 版を購入しても貰えるのは Enterprise 版となります。

※この ISO ファイルは基本的に最新バージョンを購入して旧バージョンを取得した人向けです。そうでない方は CD-ROM からインストールしてください。

 - [ID: 28037, Delphi 7 Professional ISO - Japanese](https://cc.embarcadero.com/item/28037)
 - [ID: 28038, Delphi 7 Enterprise ISO - Japanese](https://cc.embarcadero.com/item/28037)

インストールが終わったら [ツール | 環境オプション] の `Delphi Direct` タブで **Delphi Direct** を無効にしておくとよいでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b9f583ce-5ba7-08e6-4e00-3f5903c6850c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/77fa253c-ec95-1143-b9a4-c02677ae7c47.png)

:::note warn
マルチディスプレイ環境下でインストーラーを実行すると、ダイアログが変な所に行ってボタンがグレーアウトしているような錯覚を起こす事があります [^5]。
:::

## \#2 Update1
いわゆる **Delphi 7.1** と呼ばれるものです。

| Updater | Personal| Professional | Enterprise | Architect |
|:---|:---:|:---:|:---:|:---:|
| [ID: 25939, Delphi 7 General Update 7.1 / Personal / All Languages](https://cc.embarcadero.com/item/25939)  | 〇 | × | × | × |
| [ID: 25940, Delphi 7 General Update 7.1 / Professional / Japanese](https://cc.embarcadero.com/item/25940)  | × | 〇 | × | × |
| [ID: 25945, Delphi 7 General Update 7.1 / Enterprise / Japanese](https://cc.embarcadero.com/item/25945)  | × | × | 〇 | × |
| [ID: 25950, Delphi 7 General Update 7.1 / Architect / Japanese](https://cc.embarcadero.com/item/25950)  | × | × | × | 〇 |

アーカイブを適当な場所に解凍して `d7_ja_xxxx_upd1_1.exe` (xxxx の部分は SKU によって異なります) を実行します。

本来、アップデータを適用するとバージョンダイアログ ([ヘルプ | バージョン情報]) の表記が `Version 7.0 (Build 8.1)` になるハズなのですが、Personal / Professional SKU では Update1 を適用しても `Version 7.0 (Build 4.453)` のままです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/654294d3-de21-f36d-3576-2495b97030b7.png)

`delphi32.exe` のプロパティを確認し、ファイルバージョンが `7.0.8.1` になっていれば大丈夫です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/fd333cdd-725c-abc4-ae51-afa2ef79c9ef.png)

何故か Architect 用のアップデータもありますが、英語版 Architect を購入した方向けでしょうか？

 - [ID: 25939, Delphi 7 General Update 7.1 / Personal / All Languages](https://cc.embarcadero.com/item/25939)
 - [ID: 25940, Delphi 7 General Update 7.1 / Professional / Japanese](https://cc.embarcadero.com/item/25940)
 - [ID: 25945, Delphi 7 General Update 7.1 / Enterprise / Japanese](https://cc.embarcadero.com/item/25945)
 - [ID: 25950, Delphi 7 General Update 7.1 / Architect / Japanese](https://cc.embarcadero.com/item/25950) 
 - [Delphi 7.1 update (EDN)](http://edn.embarcadero.com/article/37626)
 - [Delphi 7 アップデート 1 (EDN)](https://support.embarcadero.com/article/35991)

### ・W32/Induc-A 対策
Update1 を適用したら、忘れずに **W32/Induc-A** 対策を行いましょう。

 - コマンドラインコンパイラ (`DCC32.EXE`) を使わないのならリネームするか他の場所に移動する。まれにコンポーネントのインストーラがセルフビルドのために使うことがあるので注意。
 - `Lib`、`Lib/Debug` フォルダに `SysConst.bak` という空のファイルを作る。
 - `Lib` フォルダを読み取り専用に設定する。

※ W32/Induc-A は Delphi 4 ～ Delphi 7 のみが影響を受けるウィルスです。現在販売されている Delphi は影響を受けません。

**See also:**

 - [W32/Induc-A Virus (Compile-A-Virus)に関するQ&A (EDN)](https://edn.embarcadero.com/article/39854)
 - [開発環境「Delphi」がウイルス汚染、作成したソフトをウイルス化 (Internet Watch)](https://internet.watch.impress.co.jp/docs/news/310087.html)

### ・BMP のバッファオーバーフロー対策

バッファオーバーフロー対策を行います。`$(DELPHI)\Source\Vcl` にある `graphics.pas` を次のように改変します。

```pascal:graphics.pas
function PaletteFromDIBColorTable(DIBHandle: THandle; ColorTable: Pointer;
  ColorCount: Integer): HPalette;

  ...

  begin
    if ColorCount > 256 then                                // ADD
      InvalidGraphic({$IFNDEF CLR}@{$ENDIF}SInvalidBitmap); // ADD
    Pal.palNumEntries := ColorCount;
    Move(ColorTable^, Pal.palPalEntry, ColorCount * 4);
  end;

  ...
```


```pascal:graphics.pas
procedure TMetafile.ReadEMFStream(Stream: TStream);

...

  NewImage;
  Stream.ReadBuffer(EnhHeader, Sizeof(EnhHeader));
  if EnhHeader.dSignature <> ENHMETA_SIGNATURE then InvalidMetafile;
  if EnhHeader.nBytes < Sizeof(EnhHeader) then // Add
    InvalidMetafile;                           // Add
  GetMem(Buf, EnhHeader.nBytes);

  ...
```


```pascal:graphics.pas
procedure TBitmap.ReadDIB(Stream: TStream; ImageSize: LongWord; bmf: PBitmapFileHeader);

  ...

        // Read the color palette
        if biClrUsed = 0 then
          biClrUsed := GetDInColors(biBitCount);
        if (biClrUsed * DIBPalSizes[OS2Format]) > (256 * SizeOf(TRGBQuad)) then // ADD
          InvalidGraphic({$IFNDEF CLR}@{$ENDIF}SInvalidBitmap);                 // ADD
        Stream.ReadBuffer(ColorTable^, biClrUsed * DIBPalSizes[OS2Format]);     
        Dec(ImageSize, biClrUsed * DIBPalSizes[OS2Format]);

  ...
```

改変した `graphics.pas` をプロジェクトフォルダにコピーして使ってください。

※ バッファオーバーフローの問題は Delphi XE4 以前で発生します。XE5 / XE6 / XE7 には修正パッチが配布されています。現在販売されている Delphi では問題解決済みです。

**See also:**

 - [Delphi および C++Builder における VCL Bitmap LoadFromFile の脆弱性について (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/Delphi%E3%81%8A%E3%82%88%E3%81%B3C%2B%2BBuilder%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BVCL_Bitmap_LoadFromFile%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
 - [Delphi および C++ Builder の VCL ライブラリのバッファ オーバーフロー (SupportKB)](https://support.embarcadero.com/article/44089)


## \#3 Bold Update for Delphi 7
Borld for Delphi Architect 用のアップデータです。

 - [ID: 25937, Bold Update for Delphi 7](https://cc.embarcadero.com/item/25937)

アーカイブを解凍し、`BoldForDelphiR40D7Architect4.0.1.0.exe` を管理者権限で実行します。

<font color="Crimson">※日本語版ではインストール不要です (未リリースのため)。</font>

## \#4 Delphi 7 Registration Wizard Update
使用許諾コード取得ウィザードのアップデータです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/28ad4691-a4f3-6eb7-81b2-cbc8c50a78a6.png)

 - [ID: 28098, Delphi 7 Registration Wizard Update](https://cc.embarcadero.com/item/28098)

アーカイブを解凍したら、すべてのファイルを Delphi インストールフォルダにある `bin` サブフォルダに上書きします。

## \#5 その他のアップデータ
ID 番号的に Update1 に含まれているかもしれないアップデータです。

### Delphi 7 MS SQL Driver Update
Enterprise / Architect SKU 向けの MS SQL DBX ドライバアップデータです。

 - [ID: 25934, Delphi 7 MS SQL Driver Update](https://cc.embarcadero.com/item/25934)

アーカイブを解凍し、`dbexpmss.dll` を Delphi インストールフォルダにある `bin` サブフォルダに上書きします。

<font color="Crimson">※Personal / Professional ではインストール不要です。</font>

### Delphi 7 CORBA Update 
Enterprise / Architect SKU 向けの VisiBroker 用 アップデートです。

 - [ID: 25935, Delphi 7 CORBA Update](https://cc.embarcadero.com/item/28098)

アーカイブを解凍し、Delphi インストールフォルダ下の所定の位置へコピーします。

| パス | ファイル |
|:---|:---|
| \Source\Rtl\Corba45 | *.pas |
| \Lib\Debug | 同名の *.dcu |
| \Lib\IDL45 | 同名の *.dcu |
| \Bin | OrbPas45.dll |

<font color="Crimson">※Personal / Professional ではインストール不要です。</font>

### Delphi 7 DB2 Driver Update
Enterprise / Architect SKU 向けの DB2 DBX ドライバアップデータです。

 - [ID: 25938, Delphi 7 DB2 Driver Update](https://cc.embarcadero.com/item/25938)

アーカイブを解凍し、`dbexpdb2.dll` を Delphi インストールフォルダにある `bin` サブフォルダに上書きします。

<font color="Crimson">※Personal / Professional ではインストール不要です。</font>



# ■ 追加コンポーネント
過去のバージョンで使っていたかもしれないコンポーネントを有効にする方法です。

## ・\[Samples\] カテゴリの VCL
インストール時に \[サンプルアプリケーション\] を選択しなかった場合、TGauge 等の一部のコンポーネントが利用できなくなります。

 1. インストーラを再度実行。
 2. インストーラのオプションで `[変更`] を選択
 3. インストールする項目で `プログラムファイル | サンプルプログラム` を選択。

上記手順で後からサンプルコンポーネントをインストールできます。

## ・TServerSocket / TClientSocket
古いバージョンでは **\[Internet\]** カテゴリにあったコンポーネントです。存在はしますが、デフォルトでは有効になっていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/2a5b1852-4d6c-1c00-699d-830f8da5dcad.png)

 1. \[コンポーネント | パッケージのインストール\]
 2. \[追加\]ボタンを押下。
 3. `$(DELPHI)\bin` [^3] にある `dclsockets70.bpl` を指定。

上記手順で TServerSocket / TClientSocket が有効になります。

# ■ その他のダウンロード可能ファイル
その他、Delphi 7 で有用なファイル群です。

## ・Indy (Internet Direct)
**Indy** に関しては別記事があります。

 - [ANSI 版 Delphi (5～2007) に最新版の Indy10 をインストールする (ht-deko.com)](https://ht-deko.com/tech034.html)

## ・IntraWeb (VCL for the Web)
**IntraWeb** に関しては別記事があります。

 - [Delphi に最新版の IntraWeb (VCL for the Web) をインストールする (Qiita)](https://qiita.com/ht_deko/items/e75d56487ff2395103a5)

## ・IBX 7.11 for D7 w/ IB 2007 support
IBX のバージョンを Delphi 2007 と同等のものへアップグレードします。

 - [ID: 24267, IBX 7.11 for D7 w/ IB 2007 support](https://cc.embarcadero.com/item/24267)

アーカイブを解凍したら、'IBXDP711.EXE' を実行します。

## ・RaveReport 5.0.8 Borland Edition
RaveReport のインストーラです。

 - [ID: 25936, Nevrona Rave Reports Borland Edition for Delphi 7](https://cc.embarcadero.com/item/25936)

Delphi 7 よりも新しいバージョンの Delphi を先にインストールしていると、RaveReport 5.0.8 Borland Edition をインストールできないかもしれません。

## ・QuickReport 3.5.1 Standard for Delphi 7
Delphi 7 用の QuickReport 3.5.1 Standard です。

 - [QuickReport 3.5.1 Standard for Delphi 7 (QuSoft)](https://www.quickreport.co.uk/free-legacy-code-examples-and-tools/)

アーカイブを解凍してできた `QRSTD351D7.EXE` を実行します。次に Delphi IDE から次の手順でコンポーネントを登録します。

 1. \[コンポーネント | パッケージのインストール\]
 2. \[追加\]ボタンを押下。
 3. `$(DELPHI)\bin` [^3] にある `dclqrt70.bpl` を指定。

## ・Delphi 7 Delphi for Microsoft .NET Preview Update 3
Delphi 7 用の .NET Framework 向けコンパイラ (DCCIL) です。後に Delphi 8 となるコンパイラのプレビュー版です。

 - [ID: 25952, Delphi 7 Delphi for Microsoft .NET Preview Update 3](https://cc.embarcadero.com/item/25952)

アーカイブを解凍してできた `Delphi_dotNET_Preview_upd3.exe` を管理者権限で実行します。

<font color="Crimson">※.NET Framework 1.0 を必要とするため、Window 10 以降では動作しません。</font>

## ・FireDAC 8.0.5
FireDAC が使える後続のバージョンを持っている場合、FireDAC をインストールする事が可能かもしれません。XE4 の FireDAC アドオンパックが利用可能な場合、XE4 ～ Delphi 5 の IDE にインストール可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c381a109-0d24-9931-4a45-a849df8abe05.png)

別記事に詳細があります。

 - [旧バージョンの Delphi に FireDAC をインストールするには？ (Qiita)](https://qiita.com/ht_deko/items/ab472231ec6a8681991a)
## ・VistaAltFix (Fix for QC report 37403)
Delphi 7 で作成した Windows テーマ対応アプリ [^4] を Vista 以降の Windows で実行した場合、〔Alt〕キーを押すとコントロールが消えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/4791a760-9811-4e3d-2611-911348e86e6e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/5c703397-e35b-b1c6-7805-fee63f6facbc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/57985c74-3066-e32a-87bd-ce8972ba2972.png)

これを回避するには **VistaAltFix** を使います。

 - [ID: 24282, Fix for QC report 37403 (CodeCentral)](https://cc.embarcadero.com/item/24282)

アーカイブを解凍すると、`VistaAltFixUnit.pas` が得られます。これは非ビジュアルコンポーネントなのですが、インストールせずに使う事もできます。

```pascal
uses
  ..., VistaAltFixUnit;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  TVistaAltFix.Create(Self); // 追加
  ...
end;
```

`VistaAltFixUnit` を **uses** に追加し、FormCreate にコードを追加するだけです。

**See also:**

 - [QC37403: ALT Key press causes controls to disappear under Themes in Vista and XP](https://web.archive.org/web/20180804000220/http://qc.embarcadero.com:80/wc/qcmain.aspx?d=37403)

## ・WinHelp(32)
Delphi 7 / 7.1 のヘルプは WinHelp(32) なのですが、Windows 10 / 11 では動作しません。

@moondoldo さんの記事を参考にしてヘルプを表示できるようにしておくとよいでしょう。

 - [Windows 10 用 WinHlp32.exe インストールバッチファイル (DoldoWorkz)](https://moondoldo.com/DoldoWorkz/?Windows10%E7%94%A8WinHlp32.exe%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)

**See also:**

 - [Microsoft WinHelp (Wikipedia)](https://ja.wikipedia.org/wiki/Microsoft_WinHelp)


# ■ Borland Database Engine (BDE)
Borland Database Engine (BDE) を正しく動作させるには追加の設定が必要です。

 - [BDE 5.2 ダウンロードサービス (EDN)](https://support.embarcadero.com/article/35925)
 - [BDE, SQL Link とは (EDN)](https://support.embarcadero.com/article/36001)
 - [BDE, SQL Link サポート状況 (EDN)](https://support.embarcadero.com/article/36002)
 - [BDE の旧バージョン (EDN)](https://support.embarcadero.com/article/36003)
 - [データベースベンダからの情報 (EDN)](https://support.embarcadero.com/article/36363)
 - [The Future of the Borland Database Engine (BDE) and SQL Links (EDN)](https://edn.embarcadero.com/article/28688)

## BDE Administrator
**BDE Administrator** は<font color="Crimson">必ず管理者権限で実行する必要があります</font>。

ショートカットのプロパティで管理者権限で実行するようにしてもいいのですが、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/586df1ad-41e6-3c01-ad9b-ebd686ce5c6d.png)

コントロールパネルからだと管理者権限では起動されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a047f6b3-7fbf-71fd-7604-107883607f42.png)

面倒なので、管理者権限への昇格が促される BDE Administrator を作ってしまうのが簡単かと思います。

 1. [XN Resource Editor 3.0.0.1 \[ja\] rev.37](https://ht-deko.com/software/xn_resourceeditor_3_0_0_1_ja_rev37.zip) をダウンロードし、適当な場所に解凍する。
 2. `C:\Program Files (x86)\Common Files\Borland Shared\BDE\` にある `bdeadmin.exe` を UAC の影響を受けない場所にコピーする (デスクトップ等)。
 3. `bdeadmin.exe` を **XN Resource Editor** で開く。
 4. [リソース | リソースの追加] で `Application Manifest` を追加する。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/448a0e83-d4bd-35b9-c55a-c1b069839f15.png)
 5. 右下のボタンで `requireAdministrator` を付与する。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/60f3a67e-fe6c-875c-95e8-2f0c72bfc614.png)
 6. [ファイル | 保存] し、`bdeadmin.exe` にシールドアイコンが付いた事を確認する。<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b83522b0-72c6-56bd-db10-14f505e3b247.png)
 7. `bdeadmin.exe` を `C:\Program Files (x86)\Common Files\Borland Shared\BDE\` に書き戻す。

※アプリケーションマニフェストを追加できるリソースエディタであれば何を使っても構いません。

## Patch for BDE 'Insufficient disk space' problem
ディスク容量が充分にあるにも関わらず、BDE を使用したアプリケーションで `Insufficient disk space` のエラーが出る問題を回避するパッチです。

 - [ID: 21475, Patch for BDE 'Insufficient disk space' problem. (4Gb multiples](https://cc.embarcadero.com/item/21475)

 1. アーカイブを解凍したら、その中にある `FixBDE4GbBug.pas` をプロジェクトフォルダにコピーする。
 2. プロジェクトファイルの **uses** 先頭に `FixBDE4GbBug` を追加してビルドする。
 3. Delphi アプリケーション以外では `FIX4GBug.dll` を静的リンクし、アプリケーションと共に配布する。

## マルチコア対策
BDE を使うアプリはシングルプロセッサで動作させる必要があります。

```pascal
uses
  ...
  Windows,
  ...

  SetProcessAffinityMask(GetCurrentProcess, 1); // CPU 0 のみを使用
```

これをやらないと高負荷時に `エラー $2A04: Operation not applicable.` が発生することがあります。

 - [マルチプロセッサマシン上で BDEを使用する (EDN)](https://edn.embarcadero.com/article/38209)

## ACL 対策
BDE Administrator の `環境設定` タブにある [Drivers | Native | PARADOX] の `NET DIR` の値がデフォルトの `C:\` のままだと PDOXUSRS.NET のエラーが出ます。UAC が有効の場合、システムドライブルートにファイルを作成する事はできないからです。

`C:\TEMP` フォルダを作ってそれを設定するか、

```pascal
  // ACL 対策
  Session.NetFileDir := SysUtils.GetHomePath;
  Session.PrivateDir := SysUtils.GetHomePath;
```

コードで指定しましょう。

| プロパティ | 意味 |
|:---|:---|
| NetFileDir | PDOXUSRS.NET 置き場。ネットワークで共通の場所 (ネットワークドライブ) を指定する必要がある。|
| PrivateDir | ロックファイル置き場。セッション毎に別のフォルダを指定する必要がある。 |

EXE がネットワークドライブに置いてあり、そこから実行する場合 `NetFileDir` は同じ場所 (ネットワークドライブのフォルダ) を、`PrivateDir` は異なる場所 (ローカルのフォルダ) を指定する必要があります。 

同一ローカルフォルダにある複数の EXE が BDE を利用する場合、`NetFileDir` は同じ場所 (適当なローカルフォルダ) を、`PrivateDir` は異なる場所 (別々のローカルフォルダ) を指定する必要があります。`PrivateDir` はデフォルトで EXE が実行されたカレントフォルダに設定されるからです。

**See also:**

 - [アクセス制御リスト (Wikipedia)](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1%E3%83%AA%E3%82%B9%E3%83%88)　
 - [Paradox ディレクトリ位置の指定 (DocWiki)](http://docwiki.embarcadero.com/RADStudio/ja/Paradox_%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E4%BD%8D%E7%BD%AE%E3%81%AE%E6%8C%87%E5%AE%9A)
 - [NetFileDir (DocWiki)](http://docwiki.embarcadero.com/Libraries/ja/Bde.DBTables.TSession.NetFileDir)
 - [PrivateDir (DocWiki)](http://docwiki.embarcadero.com/Libraries/ja/Bde.DBTables.TSession.PrivateDir)

## BDE 初期化エラー対策
エラーコード `$210D` や `$2501` に対する対処です。BDE Administrator の [環境設定] タブを開き、[System | INIT] にある SHAREDMEMLOCATION の値を **3BDE** 等に変更します。設定可能な値とデフォルト値は次の通りです。

| 項目 | Windows NT | Windows 9x |
|:---|:---|:---|
| 最小値  | 1000 (0x10000000) | 9000 (0x90000000) |
| 最大値  | 7F00 (0x7F000000) | FFFF (0xFFFF0000) |
| デフォルト値  | 6BDE (0x6BDE0000) | EBDE (0xEBDE0000) |

`3BDE` を設定すると `0x3BDE0000` を指定した事になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7f793239-0929-8c54-33e8-58e8603ca3cf.png)

Windows Vista 以降の **ASLR** (アドレス空間配置のランダム化) では次の領域が使われます。

| 項目 | ASLR |
|:---|:---|
| 最小値  | 0x50000000 |
| 最大値  | 0x78000000 |

このため、Windows 10 / 11 等でデフォルト設定のまま BDE アプリケーションを動作させると `0x6BDE0000` 以降の領域が既に使われていてエラーになる事があります。

**See also:**

 - [アドレス空間配置のランダム化 (Wikipedia)](https://ja.wikipedia.org/wiki/アドレス空間配置のランダム化)


# おわりに
使う頻度がそこそこ高い Delphi 7.1 の環境構築方法でした。Delphi 7.1 の実行の際にも管理者権限で実行するようにしてくださいね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/22c6f949-0f61-783f-c834-62698fd84966.png)

Delphi の最新バージョンでは、旧バージョンライセンスを使用することができます。「ソースコードはあるけどコンパイル環境がない！」という場合には同グレードの最新版 Delphi を購入するといいですよ。

**See also:**

 - [Delphi 旧バージョン情報 (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/previous-versions)
 - [Supported Versions (Support Wiki)](https://docwiki.embarcadero.com/Support/en/Supported_Versions)
 - [Platform Status (Support Wiki)](https://docwiki.embarcadero.com/PlatformStatus/en/Main_Page)
 - [Delphi 2007 (R2) for Win32 を Windows 10 / 11 にインストールする](https://qiita.com/ht_deko/items/95c95a0ca97551f0adb4)
 - [Delphi XE を Windows 10 / 11 にインストールする](https://qiita.com/ht_deko/items/84b5b0b0d591757ae129)

[^1]: このバージョンで作られた EXE は基本的に Win9x でも動作します。 
[^2]: シールドアイコンの付いた EXE は普通にダブルクリックしても管理者権限で実行されますが、たまにシールドアイコンの付いていないアップデータがあるため、明示的に右クリックから管理者権限で実行する事をオススメします。
[^3]: `$(DELPHI)` は Delphi インストールフォルダを表します。\[ツール | 環境オプション...\] の \[環境変数\] で実際のパスを確認する事ができます。
[^4]: **XPMan** を貼り付けているか、アプリケーションマニフェストをリソースに含めているアプリケーションです。
[^5]: [https://x.com/MoonDoldo/status/1896090081204781403](https://x.com/MoonDoldo/status/1896090081204781403)