C++Builder 1.0 Client/Server が無償公開されたので Windows 10 (64bit) / 11 にインストールしたいけど、インストーラが 16bit アプリケーションなせいで 64bit Windows へインストールできない件をどうにかして、ついでに 32bit Delphi として使ってみる

# はじめに
タイトル長ぇな、オイ。

2 年前の 2020年2月14日に Delphi が 25 周年を迎えて、**Delphi 1.0 Client/Server (英語版)** がアンティークソフトウェアとして無償公開されました。

 - [Delphi 1.0 Client/Server が無償公開されたので Windows 7 の XP Mode にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/e02a7b42ef65baa5d175)
 - [Delphi 1.0 Client/Server が無償公開されたので Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/a65e0950b906d28ccb5f)

今回、C++ Builder 25 周年を迎えた 2022年2月26日に **C++ Builder 1.0 Client/Server (英語版)** がアンティークソフトウェアとして無償公開されました。

 - [Historic C++ Builder 1 Install (Code Central)](https://cc.embarcadero.com/item/30934)

# インストール

インストール要件は次の通りです。

| 項目 | 備考 |
|:--|:--|
|CPU | Intel 486 以上の CPU|
|OS | Windows 95 または Windows NT (3.51 または 4.0)|
|メモリ | 16MB 以上の拡張メモリ (24MB 以上を推奨)|
|HDD | 80～175MB 以上のハードディスク (C/S は 195MB 以上)|
|その他 | CD-ROM ドライブまたは 3.5" フロッピードライブ|

C++ Builder 1 C/S のインストーラは **Install Shield 3** で作られており、16bit アプリケーションです。

つまり、C++ Builder 1 そのものは 32bit アプリケーションであるにもかかわらず、インストーラの制限によって 64bit Windows へはインストールできません。

**See also:**

 - [Delphi 2 ～ 3.1 は 32bit アプリケーションだけどインストーラが 16bit アプリケーションなせいで 64bit Windows へインストールできない件をどうにかする (Qiita)](https://qiita.com/ht_deko/items/ca2d174c14542646f46d)


# 対処方法

## ■ 32bit Windows へインストールして持ってくる

VM 等の 32bit Windows へ一旦インストールし、ファイルを 64bit Windows へ持ってくる方法です。OS の種類によってはインストールの際に **NTVDM** が別途インストールされるかもしれません。

NTVDM は `[Windows の機能の有効化または無効化]` から手動でインストールする事もできます。
`[Windows の機能の有効化または無効化]` は `[ファイル名を指定して実行 (〔Win〕+〔R〕)]` から `optionalfeatures.exe` を実行する事で素早く開く事ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f6e93983-73d2-fd77-9c78-e5376b231535.png)
`NTVDM` は `レガシ コンポーネント` の中にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e7291344-9c96-c84a-e424-38fc0e618339.png)
レジストリも収集する必要がありますが、32bit Windows のレジストリをそのまま 64bit Windows に持ってきても動作しないかもしれません。

**See also:**

 - [仮想 DOS マシン (Wikipedia)](https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3DOS%E3%83%9E%E3%82%B7%E3%83%B3)


## ■ RUNIMAGE を使う

アーカイブ内の `IMAGE` にはセットアップされた状態のファイルが格納されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f16dd0dd-df55-a6bc-fd96-5df59cbf3f6b.png)
レジストリについては自前で処理しなければなりません。

## ■ Is3Engine.zip を使う

インストーラが **Install Shield 3** の場合には回避方法があるようです。
以下のサイトから `Is3Engine.zip` をダウンロードしてきます。

 - [Installing 32-bit programs with 16-bit setup launcher stubs (ReactOS Forum)](https://reactos.org/forum/viewtopic.php?f=22&t=10988)
 - [Is3Engine.zip への直接リンク (toastytech.com)](https://toastytech.com/files/Is3Engine.zip)

:::note info 
うまく DL できない場合には、Is3Engine.zip の URL をブラウザのアドレスバーに直接入力してみてください。
:::

これを解凍してできた `setup32.exe` を C++ Builder 1 解凍フォルダ内の `SETUP\CBUILDER` フォルダに置いて実行します (`SETUP.EXE` と `setup32.exe` を同じ場所に置いて実行)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b0f6ef76-2140-5439-a8e6-8be9d5e8d827.png)

# Is3Engine.zip を使う (検証)

続いて、Windows 11 の **Windows Sandbox** を使ってインストールを検証してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8071a1b4-7ca2-a276-7ed0-44789fa3be09.png)
C++ Builder 1 C/S のアーカイブを解凍したものと、Is3Engine.zip を解凍してできた `setup32.exe` をサンドボックスに持ってきます。そして先述の通り、`SETUP.EXE` と `setup32.exe` を同じ場所に置きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b0f6ef76-2140-5439-a8e6-8be9d5e8d827.png)
`setup32.exe` のショートカットを作り [互換性] タブで `Windows 98 / Windows Me` に変更し、さらに管理者権限で実行するようにして、このショートカットを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/31a019d4-e4f8-dc6f-3230-5b7885cc79b6.png)

:::note info
以降、特に指定のない画面では [Next] ボタンを押して先に進めてください。
:::

次の画面で `Custom` セットアップを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/22c05cf4-1506-d3a8-0105-aef42758447b.png)
次の画面で `C++ Builder` を選択し、`[Options]` ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ed02d704-3e6e-c644-e0ec-78237368a5aa.png)
次の画面でリストの下から 2 番目にある `Help Files` のチェックを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/0746014a-9fb5-6f19-a8c4-f057dbeb1f7c.png)
元の画面に戻って `[Next]` ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/3cc8173f-a27b-b6fb-f542-8b1cf52d3470.png)
次の画面で `[Browse]` ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7238e57e-6aef-ccbd-e327-b2bd07d55f39.png)
`Path:` に `C:\Borland` と入力します。64bit 環境だと初期パスがおかしくなるようです。`%ProgramFiles%` の認識もアヤしいので、`C:\Borland` のようなフォルダにインストールする事をオススメします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e7fb368b-c221-496c-6c0a-0f1b19489de6.png)
パスが存在しないと言われますが、`[Yes]` を押してそのまま続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/64162704-cfcf-6991-b612-3b317cefe072.png)
パスが正しくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a091412c-b427-eb60-cc64-6bf778044b09.png)
インストールが開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/655e3511-1123-2640-f0c9-ed72fefc9ef4.png)
BDE が設定できなかった旨のエラーは出ましたが、インストーラは完走しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/9648d689-c552-b72e-de06-e8733caf412f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b959a523-b8ef-21a0-9991-6c81935d59f4.png)
メニューに登録されたりはしないので、`C:\Borland\CBuilder\BIN` にある **BCB.EXE** を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/51dbeb35-a1c7-a9fd-f2ed-08158e626f54.png)
C++ Builder 1 が起動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ed5b1107-1ecb-f75a-dcb7-664f363bc743.png)
※ C++ Builder 1 の BDE はバージョン 3.0 です。多くの場合、付属の BDE が正しくインストールできなくても問題ない気がします。

## ヘルプファイルの処理
インストーラのオプションでヘルプファイルをインストール対象から除外したのは、そのままだとインストールの途中でエラーになるからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/451214f8-aae2-5644-12a1-3c3949babf3c.png)
そもそも Windows 10 / 11 の場合、そのままだと WinHelp を表示できないので、インストールされなかったヘルプファイルは無視していいのですが、気になる方は、アーカイブを解凍した中の `IMAGE\BORLAND\CBUILDER\HELP` にあるヘルプファイルを `C:\Borland\CBuilder\Help` に手動でコピーしてください。

:::note info
エラーの内容だと、C:\Windows 以下に何かのヘルプファイルを保存しようとしてエラーになっている感じですが、C:\Windows\SysWOW64 にはすべてのヘルプファイルがコピーされています。
:::

**See also:**

 - [Windows 10/11 用 WinHlp32.exe インストールバッチファイル (moondoldo.com)](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)

## OpenHelp
OpenHelp もインストールされないようなので、アーカイブを解凍した中の `IMAGE\COMMON\BORLAND\OPENHELP` を `C:\Borland\OPENHELP` に手動でコピーしてください。

## ショートカット
インストーラでショートカットが作られなかった環境で使えるショートカットを用意しました。`C:\ProgramData\Microsoft\Windows\Start Menu\Programs\` と `%APPDATA%\Microsoft\Windows\Start Menu\Programs\` にコピーしてお使いください。

 - [Borland C++Builder 1 C/S ショートカット (ht-deko.com)](https://ht-deko.com/BCB/Borland%20C++Builder_ShortCut.zip)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/9a2fb3dd-7ac7-63b6-2944-5dab5781b4e5.png)

# C++ Builder 1 を Delphi 2 相当として使う
C++ Builder には Delphi コンパイラが含まれるため Delphi として使う事もできなくはありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/bc955c76-e2ac-859e-e730-93be813ce6b0.png)
...なのですが、C++ Builder 1 では Pascal のフォームをデザイナで編集できないのと、フォームファイルがバイナリ形式であるため、最近の C++ Builder みたいな事はできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8f37767c-97c4-f2ea-efc6-3a533d30c2bb.png)
フォームファイルは C++ Builder でユニットを作成して保存すれば作られるため、次のような Pascal (Delphi) ユニットを作れば、コンポーネントの動的作成によるなんちゃって Delphi は達成できます。

```pascal
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
```

フォームに関する事はフォームデザイナのコンテキストメニューで `View as Text` を選択し、その中で貼り付ければコンポーネントの作成もやれない事はないです。C++ フォームでデザインして、それを `View as Text` で Pascal フォームへ貼り付けて...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/04a38e64-2e87-aeba-f700-a1d52b9bb3d4.png)
つまりは、そのような...とても涙ぐましい努力をしなければならないので、C++ Builder 1 は素直に C++ として使うのがいいと思います。Delphi 2.0 があれば、そちらで作ったユニットを混在できるのですが...。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8052e4ab-50d8-63ee-e499-3398c6c4af74.png)
**See also:**

 - [C++ Builder を Delphi として使う？ (Qiita)](https://qiita.com/ht_deko/items/8e535d09f013cae372e9)
 - [今更聞けない Delphi のコト (フォームファイル編) (ht-deko.com)](https://ht-deko.com/tech032.html)

## コマンドラインコンパイラなら...

コマンドラインコンパイラを使って、Object Pascal の学習用環境を作ってみます。

`C:\DELPHI` というフォルダの下に次に示すサブフォルダを作成し、C++ Builder 1 C/S のアーカイブを解凍したフォルダからファイルを持ってきます。

| ローカルフォルダ | アーカイブ |
|:---|:---|
| BIN | IMAGE\BORLAND\CBUILDER\BIN から **DCC32.EXE** と **RLINK32.DLL** <br>※ GREP.EXE や TOUCH.EXE もコピーしてくるといいかも。面倒だったらフォルダの中をすべてコピー。 |
| LIB | IMAGE\BORLAND\CBUILDER\LIB\OBJ の中をすべて |
| SOURCE<br>(任意) | IMAGE\BORLAND\CBUILDER\SOURCE\TOOLSAPI<br>IMAGE\BORLAND\CBUILDER\SOURCE\VCL をフォルダごと |


```
C:\DELPHI
├─BIN
│      DCC32.EXE
│      RLINK32.DLL
├─LIB
│      *.DCU 他
└─SOURCE
    ├─TOOLSAPI
    │      *.pas 他
    └─VCL
           *.pas 他
```

`BIN` フォルダに `DCC32.CFG` というファイルを作ります。

```DCC32.CFG
-U"C:\DELPHI\LIB"
```

これで、コマンドラインからコンパイルできます。

```pascal:hello.dpr
program Hello(Output);
begin
  Writeln('Hello, world.');
end.
```

`hello.dpr` をコンパイルしてみます。コンソールアプリケーションなので `-CC` オプションが必要です。

```
C:\DELPHI\BIN>dcc32 -cc hello.dpr
Delphi for Win32  Version 9.3  Copyright (c) 1983,97 Borland International
hello.dpr(1)
2 lines, 0.00 seconds, 3324 bytes code, 1241 bytes data.

C:\DELPHI\BIN>hello
Hello, world.
```

**P_IDE** を使うと、より簡単にコマンドラインコンパイラを扱えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/0ad18a68-5659-9b8e-ba1b-c3576fa377ab.png)
C++Builder 1 (Delphi 2.0 相当) の Delphi コンパイラはかなり古く、動的配列すら使えないシロモノですが、インストーラを実行せずに使える Object Pascal コンパイラが無償で入手可能になった点は歓迎すべき事だと思います。

...何のしがらみもなければ、普通に **Delphi Comunity Edition** で学習すればいいんですけどね。

**See also:**

 - [P_IDE (GitHub)](https://github.com/ht-deko/P_IDE/)
 - [Delphi Community Edition (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/starter)
 - [C++ Builder Community Edition (Embarcadero)](https://www.embarcadero.com/jp/products/cbuilder/starter)

# おわりに
今までにやった Delphi / C++ Builder インストールの知識を総動員したような記事になってしまいました。なんとか C++ Builder 1 C/S が 64bit Windows で動作するようになってホッとしました。

今年で C++ Builder 25 周年です。25 周年記念サイトや、記念 Blog 記事があったりしてなかなか盛り上がっているようです。
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f84f0aaa-b25d-c248-6af0-74082b9811f0.png)](https://25.cppbuilder.dev/)
**See also:**

 - [C++ Builder 25 周年記念サイト (25.cppbuilder.dev)](https://25.cppbuilder.dev/)
 - [Celebrating 25 Years of C++Builder! (blogs.embarcadero.com)](https://blogs.embarcadero.com/celebrating-25-years-of-cbuilder/)
 - [C++Builder – リリースから25年！ (blogs.embarcadero.com)](https://blogs.embarcadero.com/ja/celebrating-25-years-of-cbuilder-ja/)
 - [Turbo Pascal 1.0 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/54cefe48e729742e818d#-turbo-pascal-302) 
 - [Turbo Pascal 3.02 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/54cefe48e729742e818d#-turbo-pascal-302) 
 - [Turbo Pascal 5.5 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/eb35e0480559f893a9b8) 
 - [Turbo C 2.01 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/100bb258e4480aa7bdf3) 
 - [Turbo C++ 1.01 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/7a0e5d84d258c3b1a795) 
 - [Delphi 1.0 Client/Server を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/a65e0950b906d28ccb5f)