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