VirtualBox

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

Last change on this file since 39895 was 38533, checked in by vboxsync, 13 years ago

Main/ErrorInfo: allow to set standard errors without text and error setting
from an existing com::ErrorInfo object

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.9 KB
Line 
1/** @file
2 * VirtualBoxErrorInfo COM class definition.
3 */
4
5/*
6 * Copyright (C) 2006-2010 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 */
16
17#ifndef ____H_VIRTUALBOXERRORINFOIMPL
18#define ____H_VIRTUALBOXERRORINFOIMPL
19
20#include "VirtualBoxBase.h"
21
22using namespace com;
23
24class ATL_NO_VTABLE VirtualBoxErrorInfo
25 : public CComObjectRootEx<CComMultiThreadModel>
26 , VBOX_SCRIPTABLE_IMPL(IVirtualBoxErrorInfo)
27#ifndef VBOX_WITH_XPCOM /* IErrorInfo doesn't inherit from IDispatch, ugly 3am hack: */
28 , public IDispatch
29#endif
30{
31public:
32
33 DECLARE_NOT_AGGREGATABLE(VirtualBoxErrorInfo)
34
35 DECLARE_PROTECT_FINAL_CONSTRUCT()
36
37 BEGIN_COM_MAP(VirtualBoxErrorInfo)
38 COM_INTERFACE_ENTRY(IErrorInfo)
39 COM_INTERFACE_ENTRY(IVirtualBoxErrorInfo)
40 COM_INTERFACE_ENTRY(IDispatch)
41 END_COM_MAP()
42
43#ifndef VBOX_WITH_XPCOM
44
45 HRESULT init(IErrorInfo *aInfo);
46
47 STDMETHOD(GetGUID)(GUID *guid);
48 STDMETHOD(GetSource)(BSTR *source);
49 STDMETHOD(GetDescription)(BSTR *description);
50 STDMETHOD(GetHelpFile)(BSTR *pBstrHelpFile);
51 STDMETHOD(GetHelpContext)(DWORD *pdwHelpContext);
52
53 // IDispatch forwarding - 3am hack.
54 typedef IDispatchImpl<IVirtualBoxErrorInfo, &IID_IVirtualBoxErrorInfo, &LIBID_VirtualBox, kTypeLibraryMajorVersion, kTypeLibraryMinorVersion> idi;
55
56 STDMETHOD(GetTypeInfoCount)(UINT *pcInfo)
57 {
58 return idi::GetTypeInfoCount(pcInfo);
59 }
60
61 STDMETHOD(GetTypeInfo)(UINT iInfo, LCID Lcid, ITypeInfo **ppTypeInfo)
62 {
63 return idi::GetTypeInfo(iInfo, Lcid, ppTypeInfo);
64 }
65
66 STDMETHOD(GetIDsOfNames)(REFIID rIID, LPOLESTR *papwszNames, UINT cNames, LCID Lcid, DISPID *paDispIDs)
67 {
68 return idi::GetIDsOfNames(rIID, papwszNames, cNames, Lcid, paDispIDs);
69 }
70
71 STDMETHOD(Invoke)(DISPID idDispMember, REFIID rIID, LCID Lcid, WORD fw, DISPPARAMS *pDispParams,
72 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *piErrArg)
73 {
74 return idi::Invoke(idDispMember, rIID, Lcid, fw, pDispParams, pVarResult, pExcepInfo, piErrArg);
75 }
76
77#else // defined(VBOX_WITH_XPCOM)
78
79 HRESULT init(nsIException *aInfo);
80
81 NS_DECL_NSIEXCEPTION
82
83#endif
84
85 VirtualBoxErrorInfo()
86 : m_resultCode(S_OK)
87 {}
88
89 // public initializer/uninitializer for internal purposes only
90 HRESULT init(HRESULT aResultCode,
91 const GUID &aIID,
92 const char *pcszComponent,
93 const Utf8Str &strText,
94 IVirtualBoxErrorInfo *aNext = NULL);
95
96 HRESULT init(const com::ErrorInfo &ei,
97 IVirtualBoxErrorInfo *aNext = NULL);
98
99 // IVirtualBoxErrorInfo properties
100 STDMETHOD(COMGETTER(ResultCode))(LONG *aResultCode);
101 STDMETHOD(COMGETTER(InterfaceID))(BSTR *aIID);
102 STDMETHOD(COMGETTER(Component))(BSTR *aComponent);
103 STDMETHOD(COMGETTER(Text))(BSTR *aText);
104 STDMETHOD(COMGETTER(Next))(IVirtualBoxErrorInfo **aNext);
105
106private:
107 // FIXME: declare these here until VBoxSupportsTranslation base
108 // is available in this class.
109 static const char *tr(const char *a) { return a; }
110 static HRESULT setError(HRESULT rc,
111 const char * /* a */,
112 const char * /* b */,
113 void * /* c */) { return rc; }
114
115 HRESULT m_resultCode;
116 Utf8Str m_strText;
117 Guid m_IID;
118 Utf8Str m_strComponent;
119 ComPtr<IVirtualBoxErrorInfo> mNext;
120};
121
122#endif // !____H_VIRTUALBOXERRORINFOIMPL
123
124/* 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