// 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 |