ここでは実装切り換え用のマクロ定義(#ifや#ifdefなどで使われるもの)について書きます。
皆さん、Windowsプログラミングでは
などやWindows.hにコメントされているマクロを#defineしたり、
などで実装を切り換えたりしていることと思います。 これら以外にも対象のプラットフォームを識別するマクロ、 コンパイラやそのバージョンを識別するマクロ、 他のライブラリやそのどのバージョンを同時に使っているかを識別するマクロなど、 様々なマクロで実装が切り換えられるように普通のライブラリは作られています。 WTL/ATLもご多分にもれず、そのように書かれています。
そこで、WTL/ATLで使われるマクロを一覧してみました。 これらをうまく使えば、コンパイル時間の短縮、誤った実装の見過ごし防止、 名前の衝突の防止、などに活用できます。マクロを定義しなければ実装されない機能もあります。 ATLのマクロについては、WTLに関係するもの、私がよく使う一部のものについてしかリストアップしていません。 かなりたくさんあるので、詳しくは こちらをご覧ください。 WTLでのマクロがATL中に登場することはないでしょうが、ATLのマクロがWTLで使われることはあります。 また、足りないものを見つけたらご連絡くださるとありがたいです。
マクロ | 説明 |
---|---|
ATL | |
_ATL_MIN_CRT | ATLで極力CRTを使わないようにする。最低限のCRT(atlmincrt.lib)を使う |
_ATL_NO_DEFAULT_LIBS | ATLヘッダでデフォルトライブラリのリンクを指定しない(#pragma comment(lib, "xxx.lib")を使わない) |
_ATL_NO_COM_SUPPORT | ATLソース中のCOMサポート部分を使用しない |
_ATL_NO_HOSTING | ActiveXコントロールをホストしない(ホストに関係するクラスを定義しない) |
ATL_NO_LEAN_AND_MEAN | atldef.hで自動的に WIN32_LEAN_AND_MEAN と NOMCX が定義されるのを防ぐ |
_ATL_NO_COMMODULE | CComModule とそれに関するクラス/関数を定義しない |
_ATL_SINGLE_THREADED _ATL_APARTMENT_THREADED _ATL_FREE_THREADED |
使用するスレッドモデルを定義する。どれか一つ。定義しなければatldef.hにて_ATL_FREE_THREADEDになる。 |
_ATL_ATTRIBUTES | 属性付きATLプログラミングをサポートする |
_ATL_NO_AUTOMATIC_NAMESPACE | using namespace ATL; を書かない |
_ATL_NO_PRAGMA_WARNINGS | #pragma warning(disable: xxxx)でwarningを消すのをやめる |
_ATL_DISABLE_NO_VTABLE | それぞれATL_xxxマクロを空定義にする |
_ATL_DISABLE_NOTHROW | |
_ATL_DISABLE_FORCEINLINE | |
_ATL_DISABLE_NOINLINE | |
_ATL_NO_DEBUG_CRT | crtdbg.h をインクルードしない。ただし、ATLをコンパイルするためにはATLASSERTを自分で定義する必要がある。 |
_ATL_CSTRING_NO_CRT | CAtlString(非MFC環境ではCStringと同じ)がCRTを使わない実装になる。 _ATL_MIN_CRTが定義されていると自動的に定義される。 |
_ATL_NO_EXCEPTIONS | ATLでデフォルトの例外処理(CAtlExceptionをthrowする)を使わない。 _ATL_CUSTOM_THROWを定義してAtlThrowを作っていなければエラー時に落ちる (ATLASSERT or RaiseException())簡易AtlThrowが使われる。 |
_ATL_CUSTOM_THROW | 自前のAtlThrow()を書くときに使用 |
WTL | |
_ATL_NO_COM | WTLソース中のCOMサポート部分を使用しない |
_WTL_NO_CSTRING | WTL::CString を使わない(クラスを定義しない) |
_WTL_NO_WTYPES | WTL::CSize, WTL::CPoint, WTL::CRect を定義しない |
_WTL_NO_UNION_CLASSES | WTL::_U_RECT, WTL::_U_MENUorID, WTL::_U_STRINGorID を定義しない。(WTL7.0にのみ存在。WTL7.1ではATLのバージョンが7.0以上だとこれらのクラスは定義されなくなりました。) |
_ATL_NO_OLD_NAMES | 旧バージョンとの互換性のためのCUpdateUIObject、DoUpdateを定義しない |
_ATL_NO_MSIMG | atlgdi.h でMSIMG関係の定義をしない。#pragma comment(lib, "msimg32.lib")を書かない |
_ATL_NO_OPENGL | atlgdi.h でOpenGL関係の定義をしない。#pragma comment(lib, "opengl32.lib")を書かない |
_WTL_NO_AUTOMATIC_NAMESPACE | using namespace WTL; を書かない |
_WTL_NO_AUTO_THEME | CMDICommandBarCtrlImplにXPテーマに関する実装をしない |
_ATL_NO_REBAR_SUPPORT | リバーをサポートしない |
_CMDBAR_EXTRA_TRACE | WTLのコマンドバークラスで各箇所にトレースが定義される。 |
_WTL_NEW_PAGE_NOTIFY_HANDLERS | CPropertyPageImplで新しいタイプの通知ハンドラ(有効な戻り値を通常のメッセージ処理と同等になるよう拡張)を使う |
_ATL_NO_OLD_HEADERS_WIN64 | 古いヘッダ(ATL7.0より前)を使っているときに、64bit互換のAPIやマクロが定義されるのを防ぐ |
_WTL_FORWARD_DECLARE_CSTRING | CString の前方宣言(前方参照)をする。 atluser.h や atlgdi.h でCString関係の部分を使えるようにするために必要。 こちらも参考に。 |
_ATL_USE_DDX_FLOAT | DDXで浮動小数点数型(float/double)を使えるようにする |
_ATL_USE_CSTRING_FLOAT | WTL::CString の書式指定メソッドで浮動小数点数を有効にする |
_ATL_USE_NEW_PRINTER_INFO | atlprint.h で新しいPRINTER_INFO(PRINTER_INFO_8, PRINTER_INFO_9)を使えるようにする |
_WTL_NO_THEME_DELAYLOAD | atltheme.h をインクルードするときにVC7以前のバージョンでuxtheme.dllが自動的に遅延ロードにされるのを防ぐ |