1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #ifndef BASE_WIN_SCOPED_COM_INITIALIZER_H_
- #define BASE_WIN_SCOPED_COM_INITIALIZER_H_
- #include <objbase.h>
- #include <wrl/client.h>
- #include "base/base_export.h"
- #include "base/macros.h"
- #include "base/threading/thread_checker.h"
- #include "base/win/com_init_balancer.h"
- #include "base/win/scoped_windows_thread_environment.h"
- namespace base {
- namespace win {
- class BASE_EXPORT ScopedCOMInitializer : public ScopedWindowsThreadEnvironment {
- public:
-
- enum SelectMTA { kMTA };
-
- enum class Uninitialization {
-
- kAllow,
-
-
- kBlockPremature,
- };
-
- explicit ScopedCOMInitializer(
- Uninitialization uninitialization = Uninitialization::kAllow);
-
- explicit ScopedCOMInitializer(
- SelectMTA mta,
- Uninitialization uninitialization = Uninitialization::kAllow);
- ~ScopedCOMInitializer() override;
-
- bool Succeeded() const override;
-
- DWORD GetCOMBalancerReferenceCountForTesting() const;
- private:
- void Initialize(COINIT init, Uninitialization uninitialization);
- HRESULT hr_ = S_OK;
- Microsoft::WRL::ComPtr<internal::ComInitBalancer> com_balancer_;
- THREAD_CHECKER(thread_checker_);
- DISALLOW_COPY_AND_ASSIGN(ScopedCOMInitializer);
- };
- }
- }
- #endif
|