#ifndef __WIN_NANOAFX_HPP__ #define __WIN_NANOAFX_HPP__ #define _T(n) L##n class CComBSTR : public _bstr_t { public: inline CComBSTR(const wchar_t *str) : _bstr_t(str) { } inline CComBSTR(const char *str) : _bstr_t(str) { } }; class CComVariant : public tagVARIANT { }; template class CComPtr { private: T *_ptr; public: inline CComPtr() { _ptr = NULL; } inline CComPtr(T *ptr) { if(ptr) { ptr->AddRef(); _ptr = ptr; } } inline ~CComPtr() { if(_ptr) _ptr->Release(); _ptr = NULL; } inline CComPtr &operator = (T *ptr) { if(ptr) { ptr->AddRef(); _ptr = ptr; } } inline bool operator == (T *ptr) { return _ptr == ptr; } inline T *operator -> () { return _ptr; } inline T **operator & () { return &_ptr; } inline operator T *() { return _ptr; } }; #endif