36:ライブラリにしてみよう
いいかげん、この「クラスまみれのゲームプログラミング入門」のネタも尽きてきました。これは逆に言えば追加するような機能がもうほとんど残っていないともいえますので、これまでに制作してきたプログラムファイルをDLLファイルにして、様々なゲームプログラムで即座に使えるようにしましょう。ライブラリにすることで、新しいゲームを開発するたびにCGameObject.cppやCBGMusic.cppなどをコンパイルする手間を省けるので、導入の簡素化も実現できます。プロジェクトを作成する
Visual Studioの「新規作成→プロジェクト」を選択し、一覧の中から「Win32 プロジェクト」を呼び出します。その後表示されるアプリケーションウィザードでは、アプリケーションの種類に「DLL」、追加オプションに「空のプロジェクト」を選びます。
プロジェクトにファイルを追加する
これまでに作成してきたクラスファイルをプロジェクトに追加します。間違って「winmain.cpp」を追加しないように。

定義ファイルを追加する
DLLファイルにクラスに関する情報を格納するための宣言を行います。プロジェクトに「ClassGameDef.h」ヘッダを追加し、以下のように記入します。
#pragma once
#ifdef CLASSGAME_EXPORTS
#define DECLSPEC __declspec(dllexport)
#else
#define DECLSPEC __declspec(dllimport)
#endif
#pragma warning(disable:4251)

STLをDLLの一部にしようとすると、エクスポートをするように警告が出されるのですが、この解決法は「std::vector」のみに用意されており、「std::list」などではどのようにしても警告をなくすことはできません。幸いSTLのリストはDLL内で完結しており、エクスポートをしないことによる問題は発生しないので、9行目でエクスポート警告を出力しないように設定しています。
定義をクラスに埋め込む
「ClassGameDef.h」で記述した定義をDLLにしたい定義に埋め込みます。まずは「GameObject.h」ファイルの先頭に「ClassGameDef.h」をインクルードします。他のファイルには「GameObject.h」がインクルードされており、従って「ClassGameDef.h」も自動でインクルードされるので、「ClassGameDef.h」のインクルードはこの1回のみで問題ありません。
#pragma once
#include "ClassGameDef.h"
#include <tchar.h>
#include <windows.h>
#include <list>
using namespace std;
#include <dxerr9.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
#pragma comment(lib, "dxerr9.lib")
#if _DEBUG
#include <crtdbg.h>
#define new new( _NORMAL_BLOCK, __FILE__, __LINE__ )
#endif
/* 以下省略 */
後はコンパイルをしてlibファイルとdllファイルが出力されればライブラリの完成です。classDECLSPEC CGameObject ...classDECLSPEC CBGMusic :publicCGameObject ...classDECLSPEC CDxFont :publicCGameObject ...classDECLSPEC CTexture :publicCGameObject ...