Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / Windows / COM.h
1 // Windows/COM.h\r
2 \r
3 #ifndef __WINDOWS_COM_H\r
4 #define __WINDOWS_COM_H\r
5 \r
6 #include "Common/MyString.h"\r
7 \r
8 namespace NWindows {\r
9 namespace NCOM {\r
10 \r
11 #ifdef _WIN32\r
12   \r
13 class CComInitializer\r
14 {\r
15 public:\r
16   CComInitializer()\r
17   {\r
18     #ifdef UNDER_CE\r
19     CoInitializeEx(NULL, COINIT_MULTITHREADED);\r
20     #else\r
21     // it's single thread. Do we need multithread?\r
22     CoInitialize(NULL);\r
23     #endif\r
24   };\r
25   ~CComInitializer() { CoUninitialize(); };\r
26 };\r
27 \r
28 class CStgMedium\r
29 {\r
30   STGMEDIUM _object;\r
31 public:\r
32   bool _mustBeReleased;\r
33   CStgMedium(): _mustBeReleased(false) {}\r
34   ~CStgMedium() { Free(); }\r
35   void Free()\r
36   {\r
37     if (_mustBeReleased)\r
38       ReleaseStgMedium(&_object);\r
39     _mustBeReleased = false;\r
40   }\r
41   const STGMEDIUM* operator->() const { return &_object;}\r
42   STGMEDIUM* operator->() { return &_object;}\r
43   STGMEDIUM* operator&() { return &_object; }\r
44 };\r
45 \r
46 #endif\r
47 \r
48 //////////////////////////////////\r
49 // GUID <--> String Conversions\r
50 UString GUIDToStringW(REFGUID guid);\r
51 AString GUIDToStringA(REFGUID guid);\r
52 #ifdef UNICODE\r
53   #define GUIDToString GUIDToStringW\r
54 #else\r
55   #define GUIDToString GUIDToStringA\r
56 #endif\r
57 \r
58 HRESULT StringToGUIDW(const wchar_t *string, GUID &classID);\r
59 HRESULT StringToGUIDA(const char *string, GUID &classID);\r
60 #ifdef UNICODE\r
61   #define StringToGUID StringToGUIDW\r
62 #else\r
63   #define StringToGUID StringToGUIDA\r
64 #endif\r
65 \r
66   \r
67 }}\r
68 \r
69 #endif\r