// Windows/COM.h #ifndef __WINDOWS_COM_H #define __WINDOWS_COM_H #include "Common/MyString.h" namespace NWindows { namespace NCOM { #ifdef _WIN32 class CComInitializer { public: CComInitializer() { #ifdef UNDER_CE CoInitializeEx(NULL, COINIT_MULTITHREADED); #else // it's single thread. Do we need multithread? CoInitialize(NULL); #endif }; ~CComInitializer() { CoUninitialize(); }; }; class CStgMedium { STGMEDIUM _object; public: bool _mustBeReleased; CStgMedium(): _mustBeReleased(false) {} ~CStgMedium() { Free(); } void Free() { if (_mustBeReleased) ReleaseStgMedium(&_object); _mustBeReleased = false; } const STGMEDIUM* operator->() const { return &_object;} STGMEDIUM* operator->() { return &_object;} STGMEDIUM* operator&() { return &_object; } }; #endif ////////////////////////////////// // GUID <--> String Conversions UString GUIDToStringW(REFGUID guid); AString GUIDToStringA(REFGUID guid); #ifdef UNICODE #define GUIDToString GUIDToStringW #else #define GUIDToString GUIDToStringA #endif HRESULT StringToGUIDW(const wchar_t *string, GUID &classID); HRESULT StringToGUIDA(const char *string, GUID &classID); #ifdef UNICODE #define StringToGUID StringToGUIDW #else #define StringToGUID StringToGUIDA #endif }} #endif