1/* 2 * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26#ifndef AWT_OLE_H 27#define AWT_OLE_H 28 29#include "awt.h" 30#include <ole2.h> 31#include <comdef.h> 32#include <comutil.h> 33 34#ifdef _DEBUG 35 #define _SUN_DEBUG 36#endif 37 38 39#ifndef SUN_DBG_NS 40 #ifdef _LIB 41 #define SUN_DBG_NS SUN_dbg_lib 42 #else 43 #define SUN_DBG_NS SUN_dbg_glb 44 #endif //_LIB 45#endif //SUN_DBG_NS 46 47 48#ifndef TRACE_SUFFIX 49 #define TRACE_SUFFIX 50#endif 51 52namespace SUN_DBG_NS{ 53 LPCTSTR CreateTimeStamp(LPTSTR lpBuffer, size_t iBufferSize); 54 inline void snTraceEmp(LPCTSTR, ...) { } 55 void snvTrace(LPCTSTR lpszFormat, va_list argList); 56 void snTrace(LPCTSTR lpszFormat, ... ); 57}//SUN_DBG_NS namespace end 58 59#define STRACE1 SUN_DBG_NS::snTrace 60#ifdef _SUN_DEBUG 61 #define STRACE SUN_DBG_NS::snTrace 62#else 63 #define STRACE SUN_DBG_NS::snTraceEmp 64#endif 65#define STRACE0 SUN_DBG_NS::snTraceEmp 66 67struct CLogEntryPoint1 { 68 LPCTSTR m_lpTitle; 69 CLogEntryPoint1(LPCTSTR lpTitle):m_lpTitle(lpTitle) { STRACE(_T("{%s"), m_lpTitle); } 70 ~CLogEntryPoint1(){ STRACE(_T("}%s"), m_lpTitle); } 71}; 72struct CLogEntryPoint0 { 73 LPCTSTR m_lpTitle; 74 CLogEntryPoint0(LPCTSTR lpTitle):m_lpTitle(lpTitle) { STRACE0(_T("{%s"), m_lpTitle); } 75 ~CLogEntryPoint0(){ STRACE0(_T("}%s"), m_lpTitle); } 76}; 77 78#define SEP1(msg) CLogEntryPoint1 _ep1_(msg); 79#define SEP0(msg) CLogEntryPoint0 _ep0_(msg); 80#ifdef _SUN_DEBUG 81 #define SEP(msg) CLogEntryPoint1 _ep1_(msg); 82#else 83 #define SEP(msg) CLogEntryPoint0 _ep0_(msg); 84#endif 85 86 87#define OLE_BAD_COOKIE ((DWORD)-1) 88 89#define OLE_TRACENOTIMPL(msg)\ 90 STRACE(_T("Warning:%s"), msg);\ 91 return E_NOTIMPL; 92 93#define OLE_TRACEOK(msg)\ 94 STRACE0(_T("Info:%s"), msg);\ 95 return S_OK; 96 97 98#define OLE_DECL\ 99 HRESULT _hr_ = S_OK; 100 101#define OLE_NEXT_TRY\ 102 try { 103 104#define OLE_TRY\ 105 OLE_DECL\ 106 try { 107 108#define OLE_HRT(fnc)\ 109 _hr_ = fnc;\ 110 if (FAILED(_hr_)) {\ 111 STRACE1(_T("Error:%08x in ") _T(#fnc), _hr_);\ 112 _com_raise_error(_hr_);\ 113 } 114 115#define OLE_WINERROR2HR(msg, erCode)\ 116 _hr_ = erCode;\ 117 STRACE1(_T("OSError:%d in ") msg, _hr_);\ 118 _hr_ = HRESULT_FROM_WIN32(_hr_); 119 120#define OLE_THROW_LASTERROR(msg)\ 121 OLE_WINERROR2HR(msg, ::GetLastError())\ 122 _com_raise_error(_hr_); 123 124#define OLE_CHECK_NOTNULL(x)\ 125 if (!(x)) {\ 126 STRACE1(_T("Null pointer:") _T(#x));\ 127 _com_raise_error(_hr_ = E_POINTER);\ 128 } 129 130#define OLE_CHECK_NOTNULLSP(x)\ 131 if (!bool(x)) {\ 132 STRACE1(_T("Null pointer:") _T(#x));\ 133 _com_raise_error(_hr_ = E_POINTER);\ 134 } 135 136#define OLE_HRW32(fnc)\ 137 _hr_ = fnc;\ 138 if (ERROR_SUCCESS != _hr_) {\ 139 STRACE1(_T("OSError:%d in ") _T(#fnc), _hr_);\ 140 _com_raise_error(_hr_ = HRESULT_FROM_WIN32(_hr_));\ 141 } 142 143#define OLE_HRW32_BOOL(fnc)\ 144 if (!fnc) {\ 145 OLE_THROW_LASTERROR(_T(#fnc))\ 146 } 147 148#define OLE_CATCH\ 149 } catch (_com_error &e) {\ 150 _hr_ = e.Error();\ 151 STRACE1(_T("COM Error:%08x %s"), _hr_, e.ErrorMessage());\ 152 } 153 154#define OLE_CATCH_BAD_ALLOC\ 155 } catch (_com_error &e) {\ 156 _hr_ = e.Error();\ 157 STRACE1(_T("COM Error:%08x %s"), _hr_, e.ErrorMessage());\ 158 } catch (std::bad_alloc&) {\ 159 _hr_ = E_OUTOFMEMORY;\ 160 STRACE1(_T("Error: Out of Memory"));\ 161 } 162 163#define OLE_CATCH_ALL\ 164 } catch (_com_error &e) {\ 165 _hr_ = e.Error();\ 166 STRACE1(_T("COM Error:%08x %s"), _hr_, e.ErrorMessage());\ 167 } catch(...) {\ 168 _hr_ = E_FAIL;\ 169 STRACE1(_T("Error: General Pritection Failor"));\ 170 } 171 172#define OLE_RETURN_SUCCESS return SUCCEEDED(_hr_); 173#define OLE_RETURN_HR return _hr_; 174#define OLE_HR _hr_ 175 176#define _B(x) _bstr_t(x) 177#define _BT(x) (LPCTSTR)_bstr_t(x) 178#define _V(x) _variant_t(x) 179#define _VV(vrt) _variant_t(vrt, false) 180#define _VE _variant_t() 181#define _VB(b) _variant_t(bool(b)) 182 183struct OLEHolder 184{ 185 OLEHolder() 186 : m_hr(::OleInitialize(NULL)) 187 {} 188 189 ~OLEHolder(){} 190 operator bool() const { return S_OK==SUCCEEDED(m_hr); } 191 HRESULT m_hr; 192}; 193 194#endif//AWT_OLE_H 195