VirtualBox

source: vbox/trunk/include/VBox/com/VirtualBoxErrorInfo.h@ 35517

Last change on this file since 35517 was 30714, checked in by vboxsync, 14 years ago

Main: remove SupportErrorInfo template magic

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.4 KB
Line 
1/* $Id: VirtualBoxErrorInfo.h 30714 2010-07-07 16:20:03Z vboxsync $ */
2
3/** @file
4 * MS COM / XPCOM Abstraction Layer:
5 * VirtualBoxErrorInfo COM class declaration
6 */
7
8/*
9 * Copyright (C) 2008-2009 Oracle Corporation
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 *
19 * The contents of this file may alternatively be used under the terms
20 * of the Common Development and Distribution License Version 1.0
21 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
22 * VirtualBox OSE distribution, in which case the provisions of the
23 * CDDL are applicable instead of those of the GPL.
24 *
25 * You may elect to license modified versions of this file under the
26 * terms and conditions of either the GPL or the CDDL or both.
27 */
28
29#ifndef ___VBox_com_VirtualBoxErrorInfo_h
30#define ___VBox_com_VirtualBoxErrorInfo_h
31
32#include "VBox/com/defs.h"
33#include "VBox/com/string.h"
34#include "VBox/com/ptr.h"
35#include "VBox/com/Guid.h"
36
37/// @todo this is for IVirtualBoxErrorInfo, see the @todo below.
38#include "VBox/com/VirtualBox.h"
39
40namespace com
41{
42
43/**
44 * The VirtualBoxErrorInfo class implements the IVirtualBoxErrorInfo interface
45 * that provides extended error information about interface/component method
46 * invocation.
47 *
48 * @todo Rename IVirtualBoxErrorInfo/VirtualBoxErrorInfo to something like
49 * IExtendedErrorInfo since it's not actually VirtualBox-dependent any
50 * more. This will also require to create IExtendedErrorInfo.idl/h etc to
51 * let adding this class to custom type libraries.
52 */
53class ATL_NO_VTABLE VirtualBoxErrorInfo
54 : public CComObjectRootEx <CComMultiThreadModel>
55 , public IVirtualBoxErrorInfo
56{
57public:
58
59 DECLARE_NOT_AGGREGATABLE (VirtualBoxErrorInfo)
60
61 DECLARE_PROTECT_FINAL_CONSTRUCT()
62
63 BEGIN_COM_MAP (VirtualBoxErrorInfo)
64 COM_INTERFACE_ENTRY (IErrorInfo)
65 COM_INTERFACE_ENTRY (IVirtualBoxErrorInfo)
66 END_COM_MAP()
67
68 VirtualBoxErrorInfo() : mResultCode (S_OK) {}
69
70 // public initializer/uninitializer for internal purposes only
71
72 HRESULT init(HRESULT aResultCode,
73 const GUID *aIID,
74 const char *aComponent,
75 const Utf8Str &strText,
76 IVirtualBoxErrorInfo *aNext = NULL);
77
78 // IVirtualBoxErrorInfo properties
79 STDMETHOD(COMGETTER(ResultCode)) (LONG *aResultCode);
80 STDMETHOD(COMGETTER(InterfaceID)) (BSTR *aIID);
81 STDMETHOD(COMGETTER(Component)) (BSTR *aComponent);
82 STDMETHOD(COMGETTER(Text)) (BSTR *aText);
83 STDMETHOD(COMGETTER(Next)) (IVirtualBoxErrorInfo **aNext);
84
85#if !defined (VBOX_WITH_XPCOM)
86
87 HRESULT init (IErrorInfo *aInfo);
88
89 STDMETHOD(GetGUID) (GUID *guid);
90 STDMETHOD(GetSource) (BSTR *source);
91 STDMETHOD(GetDescription) (BSTR *description);
92 STDMETHOD(GetHelpFile) (BSTR *pBstrHelpFile);
93 STDMETHOD(GetHelpContext) (DWORD *pdwHelpContext);
94
95#else /* !defined (VBOX_WITH_XPCOM) */
96
97 HRESULT init (nsIException *aInfo);
98
99 NS_DECL_NSIEXCEPTION
100#endif
101
102private:
103
104 HRESULT mResultCode;
105 Bstr mText;
106 Guid mIID;
107 Bstr mComponent;
108 ComPtr <IVirtualBoxErrorInfo> mNext;
109};
110
111/**
112 * The VirtualBoxErrorInfoGlue class glues two IVirtualBoxErrorInfo chains by
113 * attaching the head of the second chain to the tail of the first one.
114 *
115 * This is done by wrapping around each member of the first chain and
116 * substituting the next attribute implementation.
117 */
118class ATL_NO_VTABLE VirtualBoxErrorInfoGlue
119 : public CComObjectRootEx <CComMultiThreadModel>
120 , public IVirtualBoxErrorInfo
121{
122public:
123
124 DECLARE_NOT_AGGREGATABLE (VirtualBoxErrorInfoGlue)
125
126 DECLARE_PROTECT_FINAL_CONSTRUCT()
127
128 BEGIN_COM_MAP (VirtualBoxErrorInfoGlue)
129 COM_INTERFACE_ENTRY (IErrorInfo)
130 COM_INTERFACE_ENTRY (IVirtualBoxErrorInfo)
131 END_COM_MAP()
132
133 VirtualBoxErrorInfoGlue() {}
134
135 // public initializer/uninitializer for internal purposes only
136
137 HRESULT init (IVirtualBoxErrorInfo *aReal, IVirtualBoxErrorInfo *aNext);
138
139protected:
140
141 HRESULT protectedInit (IVirtualBoxErrorInfo *aReal, IVirtualBoxErrorInfo *aNext);
142
143private:
144
145 // IVirtualBoxErrorInfo properties
146 COM_FORWARD_IVirtualBoxErrorInfo_GETTER_ResultCode_TO_OBJ(mReal)
147 COM_FORWARD_IVirtualBoxErrorInfo_GETTER_InterfaceID_TO_OBJ(mReal)
148 COM_FORWARD_IVirtualBoxErrorInfo_GETTER_Component_TO_OBJ(mReal)
149 COM_FORWARD_IVirtualBoxErrorInfo_GETTER_Text_TO_OBJ(mReal)
150 STDMETHOD(COMGETTER(Next)) (IVirtualBoxErrorInfo **aNext);
151
152#if !defined (VBOX_WITH_XPCOM)
153
154 STDMETHOD(GetGUID) (GUID *guid) { return mReal->GetGUID (guid); }
155 STDMETHOD(GetSource) (BSTR *source) { return mReal->GetSource (source); }
156 STDMETHOD(GetDescription) (BSTR *description) { return mReal->GetDescription (description); }
157 STDMETHOD(GetHelpFile) (BSTR *pBstrHelpFile) { return mReal->GetHelpFile (pBstrHelpFile); }
158 STDMETHOD(GetHelpContext) (DWORD *pdwHelpContext) { return mReal->GetHelpContext (pdwHelpContext); }
159
160#else /* !defined (VBOX_WITH_XPCOM) */
161
162 NS_FORWARD_NSIEXCEPTION (mReal->)
163
164#endif
165
166private:
167
168 ComPtr <IVirtualBoxErrorInfo> mReal;
169 ComPtr <IVirtualBoxErrorInfo> mNext;
170};
171
172} /* namespace com */
173
174#endif /* ___VBox_com_VirtualBoxErrorInfo_h */
175
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette