VirtualBox

source: vbox/trunk/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h@ 98102

Last change on this file since 98102 was 96407, checked in by vboxsync, 2 years ago

scm copyright and license note update

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1/* $Id: VirtualBoxErrorInfoImpl.h 96407 2022-08-22 17:43:14Z vboxsync $ */
2/** @file
3 * VirtualBoxErrorInfo COM class definition.
4 */
5
6/*
7 * Copyright (C) 2006-2022 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef MAIN_INCLUDED_VirtualBoxErrorInfoImpl_h
29#define MAIN_INCLUDED_VirtualBoxErrorInfoImpl_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include "VirtualBoxBase.h"
35
36using namespace com;
37
38class ATL_NO_VTABLE VirtualBoxErrorInfo
39 : public ATL::CComObjectRootEx<ATL::CComMultiThreadModel>
40 , VBOX_SCRIPTABLE_IMPL(IVirtualBoxErrorInfo)
41#ifndef VBOX_WITH_XPCOM /* IErrorInfo doesn't inherit from IDispatch, ugly 3am hack: */
42 , public IDispatch
43#endif
44{
45public:
46
47 DECLARE_NOT_AGGREGATABLE(VirtualBoxErrorInfo)
48
49 DECLARE_PROTECT_FINAL_CONSTRUCT()
50
51 BEGIN_COM_MAP(VirtualBoxErrorInfo)
52 COM_INTERFACE_ENTRY(IErrorInfo)
53 COM_INTERFACE_ENTRY(IVirtualBoxErrorInfo)
54 COM_INTERFACE_ENTRY(IDispatch)
55 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler)
56 END_COM_MAP()
57
58 DECLARE_TRANSLATE_METHODS(VirtualBoxErrorInfo)
59
60 HRESULT FinalConstruct()
61 {
62#ifndef VBOX_WITH_XPCOM
63 return CoCreateFreeThreadedMarshaler((IUnknown *)(void *)this, &m_pUnkMarshaler);
64#else
65 return S_OK;
66#endif
67 }
68
69 void FinalRelease()
70 {
71#ifndef VBOX_WITH_XPCOM
72 if (m_pUnkMarshaler)
73 {
74 m_pUnkMarshaler->Release();
75 m_pUnkMarshaler = NULL;
76 }
77#endif
78 }
79
80#ifndef VBOX_WITH_XPCOM
81
82 HRESULT init(IErrorInfo *aInfo);
83
84 STDMETHOD(GetGUID)(GUID *guid);
85 STDMETHOD(GetSource)(BSTR *pBstrSource);
86 STDMETHOD(GetDescription)(BSTR *description);
87 STDMETHOD(GetHelpFile)(BSTR *pBstrHelpFile);
88 STDMETHOD(GetHelpContext)(DWORD *pdwHelpContext);
89
90 // IDispatch forwarding - 3am hack.
91 typedef IDispatchImpl<IVirtualBoxErrorInfo, &IID_IVirtualBoxErrorInfo, &LIBID_VirtualBox, kTypeLibraryMajorVersion, kTypeLibraryMinorVersion> idi;
92
93 STDMETHOD(GetTypeInfoCount)(UINT *pcInfo)
94 {
95 return idi::GetTypeInfoCount(pcInfo);
96 }
97
98 STDMETHOD(GetTypeInfo)(UINT iInfo, LCID Lcid, ITypeInfo **ppTypeInfo)
99 {
100 return idi::GetTypeInfo(iInfo, Lcid, ppTypeInfo);
101 }
102
103 STDMETHOD(GetIDsOfNames)(REFIID rIID, LPOLESTR *papwszNames, UINT cNames, LCID Lcid, DISPID *paDispIDs)
104 {
105 return idi::GetIDsOfNames(rIID, papwszNames, cNames, Lcid, paDispIDs);
106 }
107
108 STDMETHOD(Invoke)(DISPID idDispMember, REFIID rIID, LCID Lcid, WORD fw, DISPPARAMS *pDispParams,
109 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *piErrArg)
110 {
111 return idi::Invoke(idDispMember, rIID, Lcid, fw, pDispParams, pVarResult, pExcepInfo, piErrArg);
112 }
113
114#else // defined(VBOX_WITH_XPCOM)
115
116 HRESULT init(nsIException *aInfo);
117
118 NS_DECL_NSIEXCEPTION
119
120#endif
121
122 VirtualBoxErrorInfo()
123 : m_resultCode(S_OK),
124 m_resultDetail(0)
125 {}
126 virtual ~VirtualBoxErrorInfo() {}
127
128 // public initializer/uninitializer for internal purposes only
129 HRESULT init(HRESULT aResultCode,
130 const GUID &aIID,
131 const char *pcszComponent,
132 const Utf8Str &strText,
133 IVirtualBoxErrorInfo *aNext = NULL);
134
135 HRESULT initEx(HRESULT aResultCode,
136 LONG aResultDetail,
137 const GUID &aIID,
138 const char *pcszComponent,
139 const Utf8Str &strText,
140 IVirtualBoxErrorInfo *aNext = NULL);
141
142 HRESULT init(const com::ErrorInfo &ei,
143 IVirtualBoxErrorInfo *aNext = NULL);
144
145 // IVirtualBoxErrorInfo properties
146 STDMETHOD(COMGETTER(ResultCode))(LONG *aResultCode);
147 STDMETHOD(COMGETTER(ResultDetail))(LONG *aResultDetail);
148 STDMETHOD(COMGETTER(InterfaceID))(BSTR *aIID);
149 STDMETHOD(COMGETTER(Component))(BSTR *aComponent);
150 STDMETHOD(COMGETTER(Text))(BSTR *aText);
151 STDMETHOD(COMGETTER(Next))(IVirtualBoxErrorInfo **aNext);
152
153 const char* getComponentName() const { return "VirtualBoxErrorInfo"; }
154
155private:
156 static HRESULT setError(HRESULT rc,
157 const char * /* a */,
158 const char * /* b */,
159 void * /* c */) { return rc; }
160
161 HRESULT m_resultCode;
162 LONG m_resultDetail;
163 Utf8Str m_strText;
164 Guid m_IID;
165 Utf8Str m_strComponent;
166 ComPtr<IVirtualBoxErrorInfo> mNext;
167
168#ifndef VBOX_WITH_XPCOM
169 IUnknown *m_pUnkMarshaler;
170#endif
171};
172
173#endif /* !MAIN_INCLUDED_VirtualBoxErrorInfoImpl_h */
174
175/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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