Index: /trunk/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h	(revision 29752)
+++ /trunk/src/VBox/Main/include/VirtualBoxErrorInfoImpl.h	(revision 29753)
@@ -1,9 +1,8 @@
 /** @file
- *
- * VirtualBoxErrorInfo COM classe definition
+ * VirtualBoxErrorInfo COM class definition.
  */
 
 /*
- * Copyright (C) 2006-2007 Oracle Corporation
+ * Copyright (C) 2006-2010 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -24,6 +23,9 @@
 
 class ATL_NO_VTABLE VirtualBoxErrorInfo
-    : public CComObjectRootEx <CComMultiThreadModel>
-    , public IVirtualBoxErrorInfo
+    : public CComObjectRootEx<CComMultiThreadModel>
+    , VBOX_SCRIPTABLE_IMPL(IVirtualBoxErrorInfo)
+#ifndef VBOX_WITH_XPCOM /* IErrorInfo doesn't inherit from IDispatch, ugly 3am hack: */
+    , public IDispatch
+#endif
 {
 public:
@@ -36,19 +38,44 @@
         COM_INTERFACE_ENTRY(IErrorInfo)
         COM_INTERFACE_ENTRY(IVirtualBoxErrorInfo)
+        COM_INTERFACE_ENTRY(IDispatch)
     END_COM_MAP()
 
-#if defined (RT_OS_WINDOWS)
+#ifndef VBOX_WITH_XPCOM
 
-    HRESULT init (IErrorInfo *aInfo);
+    HRESULT init(IErrorInfo *aInfo);
 
-    STDMETHOD(GetGUID) (GUID *guid);
-    STDMETHOD(GetSource) (BSTR *source);
-    STDMETHOD(GetDescription) (BSTR *description);
-    STDMETHOD(GetHelpFile) (BSTR *pBstrHelpFile);
-    STDMETHOD(GetHelpContext) (DWORD *pdwHelpContext);
+    STDMETHOD(GetGUID)(GUID *guid);
+    STDMETHOD(GetSource)(BSTR *source);
+    STDMETHOD(GetDescription)(BSTR *description);
+    STDMETHOD(GetHelpFile)(BSTR *pBstrHelpFile);
+    STDMETHOD(GetHelpContext)(DWORD *pdwHelpContext);
 
-#else // !defined (RT_OS_WINDOWS)
+    // IDispatch forwarding - 3am hack.
+    typedef IDispatchImpl<IVirtualBoxErrorInfo, &IID_IVirtualBoxErrorInfo, &LIBID_VirtualBox, kTypeLibraryMajorVersion, kTypeLibraryMinorVersion> idi;
 
-    HRESULT init (nsIException *aInfo);
+    STDMETHOD(GetTypeInfoCount)(UINT *pcInfo)
+    {
+        return idi::GetTypeInfoCount(pcInfo);
+    }
+
+    STDMETHOD(GetTypeInfo)(UINT iInfo, LCID Lcid, ITypeInfo **ppTypeInfo)
+	{
+        return idi::GetTypeInfo(iInfo, Lcid, ppTypeInfo);
+	}
+
+	STDMETHOD(GetIDsOfNames)(REFIID rIID, LPOLESTR *papwszNames, UINT cNames, LCID Lcid, DISPID *paDispIDs)
+	{
+        return idi::GetIDsOfNames(rIID, papwszNames, cNames, Lcid, paDispIDs);
+	}
+
+	STDMETHOD(Invoke)(DISPID idDispMember, REFIID rIID, LCID Lcid, WORD fw, DISPPARAMS *pDispParams,
+                      VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *piErrArg)
+	{
+		return idi::Invoke(idDispMember, rIID, Lcid, fw, pDispParams, pVarResult, pExcepInfo, piErrArg);
+	}
+
+#else // defined(VBOX_WITH_XPCOM)
+
+    HRESULT init(nsIException *aInfo);
 
     NS_DECL_NSIEXCEPTION
@@ -56,22 +83,22 @@
 #endif
 
-    VirtualBoxErrorInfo() : mResultCode (S_OK) {}
+    VirtualBoxErrorInfo() : mResultCode(S_OK) {}
 
     // public initializer/uninitializer for internal purposes only
-    HRESULT init (HRESULT aResultCode, const GUID &aIID,
-                  CBSTR aComponent, CBSTR aText,
-                  IVirtualBoxErrorInfo *aNext = NULL);
+    HRESULT init(HRESULT aResultCode, const GUID &aIID,
+                 CBSTR aComponent, CBSTR aText,
+                 IVirtualBoxErrorInfo *aNext = NULL);
 
     // IVirtualBoxErrorInfo properties
-    STDMETHOD(COMGETTER(ResultCode)) (LONG *aResultCode);
-    STDMETHOD(COMGETTER(InterfaceID)) (BSTR *aIID);
-    STDMETHOD(COMGETTER(Component)) (BSTR *aComponent);
-    STDMETHOD(COMGETTER(Text)) (BSTR *aText);
-    STDMETHOD(COMGETTER(Next)) (IVirtualBoxErrorInfo **aNext);
+    STDMETHOD(COMGETTER(ResultCode))(LONG *aResultCode);
+    STDMETHOD(COMGETTER(InterfaceID))(BSTR *aIID);
+    STDMETHOD(COMGETTER(Component))(BSTR *aComponent);
+    STDMETHOD(COMGETTER(Text))(BSTR *aText);
+    STDMETHOD(COMGETTER(Next))(IVirtualBoxErrorInfo **aNext);
 
 private:
     // FIXME: declare these here until VBoxSupportsTranslation base
     //        is available in this class.
-    static const char *tr (const char *a) { return a; }
+    static const char *tr(const char *a) { return a; }
     static HRESULT setError(HRESULT rc,
                             const char * /* a */,
@@ -86,5 +113,5 @@
 };
 
-#endif // ____H_VIRTUALBOXERRORINFOIMPL
+#endif // !____H_VIRTUALBOXERRORINFOIMPL
 
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
