Visual Studio 2017 Visual C++ : ATL クラスの概要

#はじめに
ATL は ActiveX Template Library の略ですが、STL 同様のテンプレートライブラリなのでヘッダーファイルをインクルードするだけで、様々なクラスや関数が利用できるようになります。具体的には下記の MSDN のページを参照してください。

参考：[MSDN ATL クラスの概要](https://msdn.microsoft.com/ja-jp/library/x1c35cc3.aspx)

#ATL クラスの一覧
ATL クラスは非常にたくさんあって、MSDN では次のように分類されています。これらクラスは、フレームワーク内部で主に使われるものとプログラムを組む時有用と思われるものに分かれます。後者のうち、よく使われると思われるものは、下のリストで太字にしてあります。

ActiveX コントロールやアプリケーションを構築する場合は、Windows のサポート、UI のサポート、永続化なども有用です。

- クラス ファクトリ
- **メモリ管理**
- クラス情報
- MMC スナップイン
- **Collection**
- オブジェクトの安全性
- COM モジュール
- 永続化
- 複合コントロール
- プロパティとプロパティ ページ
- コネクション ポイント
- レジストリのサポート
- コンテインメントを制御します。
- 実行中のオブジェクト
- コントロール: 一般のサポート
- セキュリティ
- データ転送
- サービス プロバイダーのサポート
- **データ型**
- サイト情報
- **デバッグと例外**
- 文字列とテキスト
- デュアル インターフェイス
- ティアオフ インターフェイス
- **列挙子とコレクション**
- スレッド プール
- エラー情報
- スレッド モデルとクリティカル セクション
- **ファイル処理**
- UI のサポート
- インターフェイス ポインター
- Windows のサポート
- IUnknown の実装
- ユーティリティ

太字のグループについて、含まれるクラスのうち主なものを次に示します。


##メモリ管理
スマートポインタとスマートポインタのコレクションが含まれます。使いそうなものを下に挙げます。

- CAutoPtr (atlbase.h)
- CAutoPtrArray (atlcoll.h)
- CAutoPtrList (atlcoll.h)
- CComPtr (atlbase.h)

##コレクション
よく使われるコレクションクラスが含まれます。主なものを下に挙げます。

- CAtlArray (atlcoll.h)
- CAtlList (atlcoll.h)
- CAtlMap (atlcoll.h)
- CSimpleArray (atlcoll.h)
- CRBTree (atlcoll.h)
- CComSafeArray (atlsafe.h)

##データ型
このグループに含まれるクラスは次の3つだけです。このうち、CComBSTR は BSTR 型のラッパーでよく使用されます。

- CComBSTR (atlbase.h)
- CComVariant (atlcomcli.h)
- CComCurrency (atlcur.h)

##デバッグと例外
このグループには２つのクラスが含まれますが、よく使われそうなのは CAtlException クラスのみです。使用するにはヘッダー atlexcept.h が必要です。


##列挙子とコレクション
このグループでよく使われそうなのは、CComEnum, CComEnumImpl クラスです。使用するにはヘッダー atlcom.h が必要です。


##ファイル処理
普通のファイルとメモリマップファイル(共有メモリ)、一時ファイルをサポートするクラスがあります。

- CAtlFile (atlfile.h)
- CAtlFileMapping (atlfile.h)
- CAtlTemporaryFile (atlfile.h)

##ユーティリティ
次のクラスが含まれます。

- CPoint (atltypes.h)
- CRect (atltypes.h)
- CSize (atltypes.h)
- CString (atlstr.h) CStringT の簡略型
- CTime (atltime.h)
- CTimeSpan (atltime.h)
- CImage (atlimage.h)

#グローバル関数
ATL にはクラス以外のものも含まれています。グローバル関数もその一つです。下の一覧で、よく使いそうなグループは太字にしています。詳細は下記の MSDN ページによります。

[MSDN: ATL 関数](https://msdn.microsoft.com/ja-JP/library/x5e2ysh1.aspx)


- **パス関数**
- HTTP ユーティリティ関数
- **テキスト エンコード関数**
- COM マップに関するグローバル関数
- 複合コントロールに関するグローバル関数
- コネクション ポイントに関するグローバル関数
- デバイス コンテキストに関するグローバル関数
- **デバッグとエラー報告に関するグローバル関数**
- イベント処理に関するグローバル関数
- マーシャリングに関するグローバル関数
- ピクセル/HIMETRIC 変換のグローバル関数
- レジストリとタイプ ライブラリに関するグローバル関数
- セキュリティに関するグローバル関数
- セキュリティ識別子に関するグローバル関数
- サーバー登録に関するグローバル関数
- WinModule に関するグローバル関数

##パス関数
ファイルのパスなどを解析したり処理する ATLPath クラスのスタティックメソッドです。これらの関数はたくさんの種類があります。以下の一覧はそのうちの一部 (例) です。

パス関数を使用するにはヘッダー atlpath.h が必要です。

- ATLPath::FileExists
- ATLPath::FindFileName
- ATLPath::IsDirectory
- ATLPath::Append
- ATLPath::FindExtension
- ATLPath::StripPath
- ATLPath::RemoveExtension
- ATLPath::IsUNC
- ATLPath::RemoveBlanks
- ATLPath::IsRelative

##テキスト エンコード関数
このグループのグローバル関数ではテキストのエンコード・でコードをサポートします。これも数が多いので一部 (例) のみ下に示します。

テキスト エンコード関数を使用するにはヘッダー atlenc.h が必要です。

- AtlGetHexValue
- AtlUnicodeToUTF8
- EscapeXML
- QEncode
- UUEncode

##デバッグとエラー報告に関するグローバル関数
このグループは例外を発生させたり、エラーコードを変換したりする関数からなります。使いそうな関数を下に示します。

- AtlThrow
- AtlHresultFromLastError
- AtlHresultFromWin32


#その他
ATL では、他にグローバル変数、マクロ、演算子、構造体、typedef も定義されています。

-