VisualStudio 2019でDX61SDKができました。

# ビジュアルスタディオ2019(Win, VC++2019)でDX6.1のサンプルソースをコンパイル、実行を試しました。

* 使用一覧
  * Microsoft VisualStudio 2019 コミュニティ（以後、VisualStudio）
  * DirectX 6.1 SDK

## 手順

VisualStudio Installerでワークロードの「C++によるゲーム開発」にチェックを入れてインストール。
Internet Archiveの[Microsoft DirectX 6.1 SDK](https://archive.org/details/dx61sdkimage)ページの右にあるメニューのDOWNLOAD OPTIONSのWINDOWS EXECUTABLEをダウンロードしてインストール。（ここではインストール先をc:¥dx61sdkのままと仮定します。）

ウィンドウズキーを押して「x86 Native Tools Command Prompt for VS 2019」を起動。
以下のようにサンプルを試してみます。

```
cd ¥dx61sdk¥samples¥multimedia¥ddraw¥src¥ddex2

SET DXSDKROOT=c:¥dx61sdk
nmake
```

実行ログです。

```
>nmake

Microsoft(R) Program Maintenance Utility Version 14.28.29334.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl -Z7 -Ox -c /D "WIN32" /D "_WINDOWS" /D "DEBUG" /MLd  -FoDebug\DDex2.obj DDex2.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.28.29334 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : コマンド ライン warning D9002 : 不明なオプション '/MLd' を無視します。
DDex2.cpp
        cl -Z7 -Ox -c /D "WIN32" /D "_WINDOWS" /D "DEBUG" /MLd  -FoDebug\ddutil.obj ddutil.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.28.29334 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

cl : コマンド ライン warning D9002 : 不明なオプション '/MLd' を無視します。
ddutil.cpp
        rc -r -fo Debug\DDex2.res DDex2.rc
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation.  All rights reserved.

        link -map -debug:full -debugtype:cv  /NODEFAULTLIB:LIBC /INCREMENTAL:NO /PDB:NONE /NOLOGO /SUBSYSTEM:WINDOWS Debug\DDex2.obj Debug\ddutil.obj   -out:Debug\DDex2.exe   kernel32.lib gdi32.lib user32.lib advapi32.lib gdi32.lib comdlg32.lib winspool.lib shell32.lib winmm.lib comctl32.lib ole32.lib oleaut32.lib ddraw.lib dxguid.lib   Debug\DDex2.res
```

```
>dir debug

2020/12/01  10:57    <DIR>          .
2020/12/01  10:57    <DIR>          ..
2020/12/01  10:57           630,784 DDex2.exe
2020/12/01  10:57           719,701 DDex2.map
2020/12/01  10:57            78,264 DDex2.obj
2020/12/01  10:57           309,576 DDex2.res
2020/12/01  10:57            72,503 ddutil.obj
               5 個のファイル           1,810,828 バイト
               2 個のディレクトリ  46,691,536,896 バイトの空き領域
```

DDex2.exeを実行すると以下のように表示されると思います。

![Parallels Picture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58020/2c696b1e-98ff-69a1-a596-56cdf958391e.png)

ESCキーを押しても終了できます。

### その他

* 

```
winmain.obj : error LNK2019: 未解決の外部シンボル "long __cdecl D3DEnum_EnumerateDevices(long (__cdecl*)(struct _DDCAPS_DX7 *,struct _D3DDeviceDesc *))" (?D3DEnum_EnumerateDevices@@YAJP6AJPAU_DDCAPS_DX7@@PAU_D3DDeviceDesc@@@Z@Z) が関数 _WinMain@16 で参照されました
  定義済みの一致する可能性があるシンボルに関するヒント:
    "long __cdecl D3DEnum_EnumerateDevices(long (__cdecl*)(struct _DDCAPS_DX6 *,struct _D3DDeviceDesc *))" (?D3DEnum_EnumerateDevices@@YAJP6AJPAU_DDCAPS_DX6@@PAU_D3DDeviceDesc@@@Z@Z)
```
が出るときにはmakefileの*.cppのコンパイル定義の箇所に「/I$(DXSDKROOT)\include」を付けます。

* 

```
winmain.rc(10) : fatal error RC1015: cannot open include file 'afxres.h'.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\rc.EXE"' : リターン コード '0x1'
```
が出るときは
winmain.rcを

```
//#include "afxres.h"
#include "winres.h"
```

にします。（[参考を見る](https://qiita.com/yohhoy/items/7c2a37cfcbb7fd6f26a1)）