1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_BASE_WIN_ATL_MODULE_H_
6#define UI_BASE_WIN_ATL_MODULE_H_
7
8#include <atlbase.h>
9#include <atlcom.h>
10
11#include "base/basictypes.h"
12
13namespace ui {
14namespace win {
15
16// Ensure that we have exactly one ATL module registered. It's safe to
17// call this more than once. ATL functions will crash if there's no
18// ATL module registered, or if you try to register two of them, so
19// dynamically registering one if needed makes it much easier for us
20// to support different build configurations like multi-dll without
21// worrying about which side of a module boundary each ATL module object
22// belongs on.
23//
24// This function must be implemented in this header file rather than a
25// source file so that it's inlined into the module where it's included,
26// rather than in the "ui" module.
27static void CreateATLModuleIfNeeded() {
28  if (_pAtlModule == NULL) {
29    // This creates the module and automatically updates _pAtlModule.
30    CR_DEFINE_STATIC_LOCAL(CComModule, module, ());
31  }
32}
33
34}  // namespace win
35}  // namespace ui
36
37#endif  // UI_BASE_WIN_ATL_MODULE_H_
38