1
Help us understand the problem. What are the problem?

posted at

updated at

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

はじめに

Delphi 7 は 2002 年に Borland からリリースされました 1

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

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

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

いずれかからダウンロードできます。Delphi 7 は古い製品という事もあり、登録製品ポータルからだとダウンロードできないアイテムがあるようです。

本記事は、各種ファイルを登録ユーザダウンロードからダウンロードして Windows 10 /11 にインストールする手順となっています。

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

#1 Delphi 7 ISO

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

インストーラが自動起動した場合にはそれを閉じ、Explorer で install\setup.exe を右クリックしたら [管理者として実行] で開きます 2
image.png
インストール先も、デフォルトの %ProgramFiles(x86)%\Borland\Delphi7\ ではなく、C:\Embarcadero\Delphi7\ のような UAC の影響を受けない場所にインストールした方がトラブルは少ないと思います。

ISO Personal Professional Enterprise Architect
ID: 28037, Delphi 7 Professional ISO - Japanese × × ×
ID: 28038, Delphi 7 Enterprise ISO - Japanese × × (〇)

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

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

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

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

#2 Update1

いわゆる Delphi 7.1 と呼ばれるものです。

ISO Personal Professional Enterprise Architect
ID: 25939, Delphi 7 General Update 7.1 / Personal / All Languages × × ×
ID: 25940, Delphi 7 General Update 7.1 / Professional / Japanese × × ×
ID: 25945, Delphi 7 General Update 7.1 / Enterprise / Japanese × × ×
ID: 25950, Delphi 7 General Update 7.1 / Architect / Japanese × × ×

アーカイブを適当な場所に解凍して 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
delphi32.exe のプロパティを確認し、ファイルバージョンが 7.0.8.1 になっていれば大丈夫です。
image.png
何故か Architect 用のアップデータもありますが、英語版 Architect を購入した方向けでしょうか?

・W32/Induc-A 対策

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

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

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

See also:

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

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

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;

  ...
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);

  ...
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:

#3 Bold Update for Delphi 7

Borld for Delphi Architect 用のアップデータです。

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

※日本語版ではインストール不要です (未リリースのため)。

#4 Delphi 7 Registration Wizard Update

使用許諾コード取得ウィザードのアップデータです。
image.png

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

#5 その他のアップデータ

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

Delphi 7 MS SQL Driver Update

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

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

※Personal / Professional ではインストール不要です。

Delphi 7 CORBA Update

Enterprise / Architect SKU 向けの VisiBroker 用 アップデートです。

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

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

※Personal / Professional ではインストール不要です。

Delphi 7 DB2 Driver Update

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

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

※Personal / Professional ではインストール不要です。

■ 追加コンポーネント

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

・[Samples] カテゴリの VCL

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

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

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

・TServerSocket / TClientSocket

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

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

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

■ その他のダウンロード可能ファイル

その他、Delphi 7 で有用なファイル群です。

・Indy (Internet Direct)

Indy に関しては別記事があります。

・IntraWeb (VCL for the Web)

IntraWeb に関しては別記事があります。

・IBX 7.11 for D7 w/ IB 2007 support

IBX のバージョンを Delphi 2007 と同等のものへアップグレードします。

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

・RaveReport 5.0.8 Borland Edition

RaveReport のインストーラです。

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

・QuickReport 3.5.1 Standard for Delphi 7

Delphi 7 用の QuickReport 3.5.1 Standard です。

アーカイブを解凍してできた 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 となるコンパイラのプレビュー版です。

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

※.NET Framework 1.0 を必要とするため、Window 10 以降では動作しません。

・VistaAltFix (Fix for QC report 37403)

Delphi 7 で作成した Windows テーマ対応アプリ 4 を Vista 以降の Windows で実行した場合、〔Alt〕キーを押すとコントロールが消えます。
image.png
image.png
image.png
これを回避するには VistaAltFix を使います。

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

uses
  ..., VistaAltFixUnit;

...

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

VistaAltFixUnituses に追加し、FormCreate にコードを追加するだけです。

See also:

・WinHelp(32)

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

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

See also:

■ Borland Database Engine (BDE)

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

BDE Administrator

BDE Administrator必ず管理者権限で実行する必要があります

ショートカットのプロパティで管理者権限で実行するようにしてもいいのですが、
image.png
コントロールパネルからだと管理者権限では起動されません。
image.png
面倒なので、管理者権限への昇格が促される BDE Administrator を作ってしまうのが簡単かと思います。

  1. XN Resource Editor 3.0.0.1 [ja] rev.37 をダウンロードし、適当な場所に解凍する。
  2. C:\Program Files (x86)\Common Files\Borland Shared\BDE\ にある bdeadmin.exe を UAC の影響を受けない場所にコピーする (デスクトップ等)。
  3. bdeadmin.exeXN Resource Editor で開く。
  4. [リソース | リソースの追加] で Application Manifest を追加する。

    image.png
  5. 右下のボタンで requireAdministrator を付与する。

    image.png
  6. [ファイル | 保存] し、bdeadmin.exe にシールドアイコンが付いた事を確認する。

    image.png
  7. bdeadmin.exeC:\Program Files (x86)\Common Files\Borland Shared\BDE\ に書き戻す。

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

Patch for BDE 'Insufficient disk space' problem

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

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

マルチコア対策

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

uses
  ...
  Windows,
  ...

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

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

ACL 対策

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

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

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

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

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

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

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

See also:

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
Windows Vista 以降の ASLR (アドレス空間配置のランダム化) では次の領域が使われます。

項目 ASLR
最小値 0x50000000
最大値 0x78000000

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

See also:

おわりに

使う頻度がそこそこ高い Delphi 7.1 の環境構築方法でした。Delphi 7.1 の実行の際にも管理者権限で実行するようにしてくださいね。
image.png
Delphi の最新バージョンでは、旧バージョンライセンスを使用することができます。「ソースコードはあるけどコンパイル環境がない!」という場合には同グレードの最新版 Delphi を購入するといいですよ。

See also:

  1. このバージョンで作られた EXE は基本的に Win9x でも動作します。

  2. シールドアイコンの付いた EXE は普通にダブルクリックしても管理者権限で実行されますが、たまにシールドアイコンの付いていないアップデータがあるため、明示的に右クリックから管理者権限で実行する事をオススメします。

  3. $(DELPHI) は Delphi インストールフォルダを表します。[ツール | 環境オプション...] の [環境変数] で実際のパスを確認する事ができます。 2

  4. XPMan を貼り付けているか、アプリケーションマニフェストをリソースに含めているアプリケーションです。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?