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