xref: /aosp_15_r20/external/lzma/CPP/Windows/COM.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // Windows/COM.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_WINDOWS_COM_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_WINDOWS_COM_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker // #include "../Common/MyString.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker namespace NWindows {
9*f6dc9357SAndroid Build Coastguard Worker namespace NCOM {
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker class CComInitializer
14*f6dc9357SAndroid Build Coastguard Worker {
15*f6dc9357SAndroid Build Coastguard Worker public:
CComInitializer()16*f6dc9357SAndroid Build Coastguard Worker   CComInitializer()
17*f6dc9357SAndroid Build Coastguard Worker   {
18*f6dc9357SAndroid Build Coastguard Worker     #ifdef UNDER_CE
19*f6dc9357SAndroid Build Coastguard Worker     CoInitializeEx(NULL, COINIT_MULTITHREADED);
20*f6dc9357SAndroid Build Coastguard Worker     #else
21*f6dc9357SAndroid Build Coastguard Worker     // it's single thread. Do we need multithread?
22*f6dc9357SAndroid Build Coastguard Worker     CoInitialize(NULL);
23*f6dc9357SAndroid Build Coastguard Worker     #endif
24*f6dc9357SAndroid Build Coastguard Worker   }
~CComInitializer()25*f6dc9357SAndroid Build Coastguard Worker   ~CComInitializer() { CoUninitialize(); }
26*f6dc9357SAndroid Build Coastguard Worker };
27*f6dc9357SAndroid Build Coastguard Worker 
28*f6dc9357SAndroid Build Coastguard Worker /*
29*f6dc9357SAndroid Build Coastguard Worker class CStgMedium2
30*f6dc9357SAndroid Build Coastguard Worker {
31*f6dc9357SAndroid Build Coastguard Worker   STGMEDIUM _object;
32*f6dc9357SAndroid Build Coastguard Worker   bool _mustBeReleased;
33*f6dc9357SAndroid Build Coastguard Worker public:
34*f6dc9357SAndroid Build Coastguard Worker   CStgMedium2(): _mustBeReleased(false) {}
35*f6dc9357SAndroid Build Coastguard Worker   ~CStgMedium2() { Free(); }
36*f6dc9357SAndroid Build Coastguard Worker   void Free()
37*f6dc9357SAndroid Build Coastguard Worker   {
38*f6dc9357SAndroid Build Coastguard Worker     if (_mustBeReleased)
39*f6dc9357SAndroid Build Coastguard Worker       ReleaseStgMedium(&_object);
40*f6dc9357SAndroid Build Coastguard Worker     _mustBeReleased = false;
41*f6dc9357SAndroid Build Coastguard Worker   }
42*f6dc9357SAndroid Build Coastguard Worker   const STGMEDIUM* operator->() const { return &_object;}
43*f6dc9357SAndroid Build Coastguard Worker   STGMEDIUM* operator->() { return &_object;}
44*f6dc9357SAndroid Build Coastguard Worker   STGMEDIUM* operator&() { return &_object; }
45*f6dc9357SAndroid Build Coastguard Worker };
46*f6dc9357SAndroid Build Coastguard Worker */
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker struct CStgMedium: public STGMEDIUM
49*f6dc9357SAndroid Build Coastguard Worker {
CStgMediumCStgMedium50*f6dc9357SAndroid Build Coastguard Worker   CStgMedium()
51*f6dc9357SAndroid Build Coastguard Worker   {
52*f6dc9357SAndroid Build Coastguard Worker     tymed = TYMED_NULL; // 0
53*f6dc9357SAndroid Build Coastguard Worker     hGlobal = NULL;
54*f6dc9357SAndroid Build Coastguard Worker     pUnkForRelease = NULL;
55*f6dc9357SAndroid Build Coastguard Worker   }
~CStgMediumCStgMedium56*f6dc9357SAndroid Build Coastguard Worker   ~CStgMedium()
57*f6dc9357SAndroid Build Coastguard Worker   {
58*f6dc9357SAndroid Build Coastguard Worker     ReleaseStgMedium(this);
59*f6dc9357SAndroid Build Coastguard Worker   }
60*f6dc9357SAndroid Build Coastguard Worker };
61*f6dc9357SAndroid Build Coastguard Worker 
62*f6dc9357SAndroid Build Coastguard Worker #endif
63*f6dc9357SAndroid Build Coastguard Worker 
64*f6dc9357SAndroid Build Coastguard Worker /*
65*f6dc9357SAndroid Build Coastguard Worker //////////////////////////////////
66*f6dc9357SAndroid Build Coastguard Worker // GUID <--> String Conversions
67*f6dc9357SAndroid Build Coastguard Worker UString GUIDToStringW(REFGUID guid);
68*f6dc9357SAndroid Build Coastguard Worker AString GUIDToStringA(REFGUID guid);
69*f6dc9357SAndroid Build Coastguard Worker #ifdef UNICODE
70*f6dc9357SAndroid Build Coastguard Worker   #define GUIDToString GUIDToStringW
71*f6dc9357SAndroid Build Coastguard Worker #else
72*f6dc9357SAndroid Build Coastguard Worker   #define GUIDToString GUIDToStringA
73*f6dc9357SAndroid Build Coastguard Worker #endif
74*f6dc9357SAndroid Build Coastguard Worker 
75*f6dc9357SAndroid Build Coastguard Worker HRESULT StringToGUIDW(const wchar_t *string, GUID &classID);
76*f6dc9357SAndroid Build Coastguard Worker HRESULT StringToGUIDA(const char *string, GUID &classID);
77*f6dc9357SAndroid Build Coastguard Worker #ifdef UNICODE
78*f6dc9357SAndroid Build Coastguard Worker   #define StringToGUID StringToGUIDW
79*f6dc9357SAndroid Build Coastguard Worker #else
80*f6dc9357SAndroid Build Coastguard Worker   #define StringToGUID StringToGUIDA
81*f6dc9357SAndroid Build Coastguard Worker #endif
82*f6dc9357SAndroid Build Coastguard Worker */
83*f6dc9357SAndroid Build Coastguard Worker 
84*f6dc9357SAndroid Build Coastguard Worker }}
85*f6dc9357SAndroid Build Coastguard Worker 
86*f6dc9357SAndroid Build Coastguard Worker #endif
87