blob: db54c64fce9ad7e4764cf1ed934609f97aa80373 [file] [log] [blame]
/*
* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#ifndef AWT_OLE_H
#define AWT_OLE_H
#include "awt.h"
#include <ole2.h>
#include <comdef.h>
#include <comutil.h>
#ifdef _DEBUG
#define _SUN_DEBUG
#endif
#ifndef SUN_DBG_NS
#ifdef _LIB
#define SUN_DBG_NS SUN_dbg_lib
#else
#define SUN_DBG_NS SUN_dbg_glb
#endif //_LIB
#endif //SUN_DBG_NS
#ifndef TRACE_SUFFIX
#define TRACE_SUFFIX
#endif
namespace SUN_DBG_NS{
LPCTSTR CreateTimeStamp(LPTSTR lpBuffer, size_t iBufferSize);
inline void snTraceEmp(LPCTSTR, ...) { }
void snvTrace(LPCTSTR lpszFormat, va_list argList);
void snTrace(LPCTSTR lpszFormat, ... );
}//SUN_DBG_NS namespace end
#define STRACE1 SUN_DBG_NS::snTrace
#ifdef _SUN_DEBUG
#define STRACE SUN_DBG_NS::snTrace
#else
#define STRACE SUN_DBG_NS::snTraceEmp
#endif
#define STRACE0 SUN_DBG_NS::snTraceEmp
struct CLogEntryPoint1 {
LPCTSTR m_lpTitle;
CLogEntryPoint1(LPCTSTR lpTitle):m_lpTitle(lpTitle) { STRACE(_T("{%s"), m_lpTitle); }
~CLogEntryPoint1(){ STRACE(_T("}%s"), m_lpTitle); }
};
struct CLogEntryPoint0 {
LPCTSTR m_lpTitle;
CLogEntryPoint0(LPCTSTR lpTitle):m_lpTitle(lpTitle) { STRACE0(_T("{%s"), m_lpTitle); }
~CLogEntryPoint0(){ STRACE0(_T("}%s"), m_lpTitle); }
};
#define SEP1(msg) CLogEntryPoint1 _ep1_(msg);
#define SEP0(msg) CLogEntryPoint0 _ep0_(msg);
#ifdef _SUN_DEBUG
#define SEP(msg) CLogEntryPoint1 _ep1_(msg);
#else
#define SEP(msg) CLogEntryPoint0 _ep0_(msg);
#endif
#define OLE_BAD_COOKIE ((DWORD)-1)
#define OLE_TRACENOTIMPL(msg)\
STRACE(_T("Warning:%s"), msg);\
return E_NOTIMPL;
#define OLE_TRACEOK(msg)\
STRACE0(_T("Info:%s"), msg);\
return S_OK;
#define OLE_DECL\
HRESULT _hr_ = S_OK;
#define OLE_NEXT_TRY\
try {
#define OLE_TRY\
OLE_DECL\
try {
#define OLE_HRT(fnc)\
_hr_ = fnc;\
if (FAILED(_hr_)) {\
STRACE1(_T("Error:%08x in ") _T(#fnc), _hr_);\
_com_raise_error(_hr_);\
}
#define OLE_WINERROR2HR(msg, erCode)\
_hr_ = erCode;\
STRACE1(_T("OSError:%d in ") msg, _hr_);\
_hr_ = HRESULT_FROM_WIN32(_hr_);
#define OLE_THROW_LASTERROR(msg)\
OLE_WINERROR2HR(msg, ::GetLastError())\
_com_raise_error(_hr_);
#define OLE_CHECK_NOTNULL(x)\
if (!(x)) {\
STRACE1(_T("Null pointer:") _T(#x));\
_com_raise_error(_hr_ = E_POINTER);\
}
#define OLE_CHECK_NOTNULLSP(x)\
if (!bool(x)) {\
STRACE1(_T("Null pointer:") _T(#x));\
_com_raise_error(_hr_ = E_POINTER);\
}
#define OLE_HRW32(fnc)\
_hr_ = fnc;\
if (ERROR_SUCCESS != _hr_) {\
STRACE1(_T("OSError:%d in ") _T(#fnc), _hr_);\
_com_raise_error(_hr_ = HRESULT_FROM_WIN32(_hr_));\
}
#define OLE_HRW32_BOOL(fnc)\
if (!fnc) {\
OLE_THROW_LASTERROR(_T(#fnc))\
}
#define OLE_CATCH\
} catch (_com_error &e) {\
_hr_ = e.Error();\
STRACE1(_T("COM Error:%08x %s"), _hr_, e.ErrorMessage());\
}
#define OLE_CATCH_BAD_ALLOC\
} catch (_com_error &e) {\
_hr_ = e.Error();\
STRACE1(_T("COM Error:%08x %s"), _hr_, e.ErrorMessage());\
} catch (std::bad_alloc&) {\
_hr_ = E_OUTOFMEMORY;\
STRACE1(_T("Error: Out of Memory"));\
}
#define OLE_CATCH_ALL\
} catch (_com_error &e) {\
_hr_ = e.Error();\
STRACE1(_T("COM Error:%08x %s"), _hr_, e.ErrorMessage());\
} catch(...) {\
_hr_ = E_FAIL;\
STRACE1(_T("Error: General Pritection Failor"));\
}
#define OLE_RETURN_SUCCESS return SUCCEEDED(_hr_);
#define OLE_RETURN_HR return _hr_;
#define OLE_HR _hr_
#define _B(x) _bstr_t(x)
#define _BT(x) (LPCTSTR)_bstr_t(x)
#define _V(x) _variant_t(x)
#define _VV(vrt) _variant_t(vrt, false)
#define _VE _variant_t()
#define _VB(b) _variant_t(bool(b))
struct OLEHolder
{
OLEHolder()
: m_hr(::OleInitialize(NULL))
{}
~OLEHolder(){}
operator bool() const { return S_OK==SUCCEEDED(m_hr); }
HRESULT m_hr;
};
#endif//AWT_OLE_H