1313#include " WinIncludes.h"
1414
1515class HhEvent {
16- public:
17- HANDLE m_handle = INVALID_HANDLE_VALUE;
18-
19- public:
20- HRESULT Init () {
21- if (m_handle == INVALID_HANDLE_VALUE) {
22- m_handle = CreateEvent (nullptr , TRUE , FALSE , nullptr );
23- if (m_handle == INVALID_HANDLE_VALUE) {
24- return HRESULT_FROM_WIN32 (GetLastError ());
25- }
26- }
27- return S_OK;
28- }
29- void SetEvent () { ::SetEvent (m_handle); }
30- void ResetEvent () { ::ResetEvent (m_handle); }
31- ~HhEvent () {
32- if (m_handle != INVALID_HANDLE_VALUE) {
33- CloseHandle (m_handle);
34- }
35- }
36- };
37-
38- class HhCriticalSection {
39- private:
40- CRITICAL_SECTION m_cs;
41-
42- public:
43- HhCriticalSection () { InitializeCriticalSection (&m_cs); }
44- ~HhCriticalSection () { DeleteCriticalSection (&m_cs); }
45- class Lock {
46- private:
47- CRITICAL_SECTION *m_pLock;
48-
49- public:
50- Lock () = delete ;
51- Lock (const Lock &) = delete ;
52- Lock (Lock &&other) { std::swap (m_pLock, other.m_pLock ); }
53- Lock (CRITICAL_SECTION *pLock) : m_pLock(pLock) {
54- EnterCriticalSection (m_pLock);
55- }
56- ~Lock () {
57- if (m_pLock)
58- LeaveCriticalSection (m_pLock);
59- }
60- };
61- Lock LockCS () { return Lock (&m_cs); }
62- };
63-
64- class ClassObjectRegistration {
65- private:
66- DWORD m_reg = 0 ;
67- HRESULT m_hr = E_FAIL;
68-
69- public:
70- HRESULT Register (REFCLSID rclsid, IUnknown *pUnk, DWORD dwClsContext,
71- DWORD flags) {
72- m_hr = CoRegisterClassObject (rclsid, pUnk, dwClsContext, flags, &m_reg);
73- return m_hr;
74- }
75- ~ClassObjectRegistration () {
76- if (SUCCEEDED (m_hr))
77- CoRevokeClassObject (m_reg);
78- }
79- };
80-
81- class CoInit {
82- private:
83- HRESULT m_hr = E_FAIL;
84-
85- public:
86- HRESULT Initialize (DWORD dwCoInit) {
87- m_hr = CoInitializeEx (nullptr , dwCoInit);
88- return m_hr;
89- }
90- ~CoInit () {
91- if (SUCCEEDED (m_hr))
92- CoUninitialize ();
16+ public:
17+ HANDLE m_handle = INVALID_HANDLE_VALUE;
18+
19+ public:
20+ HRESULT Init () {
21+ if (m_handle == INVALID_HANDLE_VALUE) {
22+ m_handle = CreateEvent (nullptr , TRUE , FALSE , nullptr );
23+ if (m_handle == INVALID_HANDLE_VALUE) {
24+ return HRESULT_FROM_WIN32 (GetLastError ());
9325 }
94- };
95-
26+ }
27+ return S_OK;
28+ }
29+ void SetEvent () { ::SetEvent (m_handle); }
30+ void ResetEvent () { ::ResetEvent (m_handle); }
31+ ~HhEvent () {
32+ if (m_handle != INVALID_HANDLE_VALUE) {
33+ CloseHandle (m_handle);
34+ }
35+ }
36+ };
37+
38+ class HhCriticalSection {
39+ private:
40+ CRITICAL_SECTION m_cs;
41+
42+ public:
43+ HhCriticalSection () { InitializeCriticalSection (&m_cs); }
44+ ~HhCriticalSection () { DeleteCriticalSection (&m_cs); }
45+ class Lock {
46+ private:
47+ CRITICAL_SECTION *m_pLock;
48+
49+ public:
50+ Lock () = delete ;
51+ Lock (const Lock &) = delete ;
52+ Lock (Lock &&other) { std::swap (m_pLock, other.m_pLock ); }
53+ Lock (CRITICAL_SECTION *pLock) : m_pLock(pLock) {
54+ EnterCriticalSection (m_pLock);
55+ }
56+ ~Lock () {
57+ if (m_pLock)
58+ LeaveCriticalSection (m_pLock);
59+ }
60+ };
61+ Lock LockCS () { return Lock (&m_cs); }
62+ };
63+
64+ class ClassObjectRegistration {
65+ private:
66+ DWORD m_reg = 0 ;
67+ HRESULT m_hr = E_FAIL;
68+
69+ public:
70+ HRESULT Register (REFCLSID rclsid, IUnknown *pUnk, DWORD dwClsContext,
71+ DWORD flags) {
72+ m_hr = CoRegisterClassObject (rclsid, pUnk, dwClsContext, flags, &m_reg);
73+ return m_hr;
74+ }
75+ ~ClassObjectRegistration () {
76+ if (SUCCEEDED (m_hr))
77+ CoRevokeClassObject (m_reg);
78+ }
79+ };
80+
81+ class CoInit {
82+ private:
83+ HRESULT m_hr = E_FAIL;
84+
85+ public:
86+ HRESULT Initialize (DWORD dwCoInit) {
87+ m_hr = CoInitializeEx (nullptr , dwCoInit);
88+ return m_hr;
89+ }
90+ ~CoInit () {
91+ if (SUCCEEDED (m_hr))
92+ CoUninitialize ();
93+ }
94+ };
0 commit comments