Index: /trunk/src/VBox/Main/src-server/win/VBoxComEvents.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/win/VBoxComEvents.cpp	(revision 60763)
+++ /trunk/src/VBox/Main/src-server/win/VBoxComEvents.cpp	(revision 60764)
@@ -6,5 +6,5 @@
 
 /*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -32,37 +32,40 @@
 {
     HRESULT            hr = 0;
-    CComPtr<ITypeLib>  ptlib;
-    CComPtr<ITypeInfo> ptinfo;
+    ComPtr<ITypeLib>   ptlib;
+    ComPtr<ITypeInfo>  ptinfo;
     int i;
 
 
-    hr = ::LoadRegTypeLib(LIBID_VirtualBox, kTypeLibraryMajorVersion, kTypeLibraryMinorVersion, LOCALE_SYSTEM_DEFAULT, &ptlib);
+    hr = ::LoadRegTypeLib(LIBID_VirtualBox, kTypeLibraryMajorVersion, kTypeLibraryMinorVersion, LOCALE_SYSTEM_DEFAULT, ptlib.asOutParam());
     if (FAILED(hr))
         return hr;
 
-    hr = ptlib->GetTypeInfoOfGuid(aGuid.ref(), &ptinfo);
+    hr = ptlib->GetTypeInfoOfGuid(aGuid.ref(), ptinfo.asOutParam());
     if (FAILED(hr))
         return hr;
 
-    CComTypeAttr       ptypeattr(ptinfo);
-    hr = ptinfo->GetTypeAttr(&ptypeattr);
+    TYPEATTR *pta;
+    hr = ptinfo->GetTypeAttr(&pta);
     if (FAILED(hr))
         return hr;
 
-    int cFuncs = ptypeattr->cFuncs;
+    int cFuncs = pta->cFuncs;
 
-    for (i=0; i<cFuncs; i++)
+    for (i = 0; i < cFuncs; i++)
     {
-        CComFuncDesc  pfuncdesc(ptinfo);
-        DWORD         hContext; // help context
-        BSTR          fName;
+        FUNCDESC *pfd;
+        DWORD hContext; // help context
+        BSTR fName;
 
-        hr = ptinfo->GetFuncDesc(i, &pfuncdesc);
+        hr = ptinfo->GetFuncDesc(i, &pfd);
         if (FAILED(hr))
-           break;
+            break;
 
-        hr = ptinfo->GetDocumentation(pfuncdesc->memid, &fName, NULL, &hContext, NULL);
+        hr = ptinfo->GetDocumentation(pfd->memid, &fName, NULL, &hContext, NULL);
         if (FAILED(hr))
-           break;
+	{
+            ptinfo->ReleaseFuncDesc(pfd);
+            break;
+	}
 
         /* We only allow firing event callbacks */
@@ -77,8 +80,9 @@
         SysFreeString(fName);
 
-        pfuncdesc.Release();
+        ptinfo->ReleaseFuncDesc(pfd);
     }
+    ptinfo->ReleaseTypeAttr(pta);
 
-   return hr;
+    return hr;
 }
 
@@ -100,8 +104,8 @@
 
 
-HRESULT ComEventsHelper::fire(IDispatch* aObj, ComEventDesc& event, CComVariant* result)
+HRESULT ComEventsHelper::fire(IDispatch *aObj, ComEventDesc &event, tagVARIANT *result)
 {
      int argc = event.mArgc;
-     CComVariant* args = event.mArgs;
+     tagVARIANT *args = event.mArgs;
      DISPPARAMS disp = { args, NULL, argc, 0};
      DISPID           dispid;
Index: /trunk/src/VBox/Main/src-server/win/VBoxComEvents.h
===================================================================
--- /trunk/src/VBox/Main/src-server/win/VBoxComEvents.h	(revision 60763)
+++ /trunk/src/VBox/Main/src-server/win/VBoxComEvents.h	(revision 60764)
@@ -6,5 +6,5 @@
 
 /*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -27,6 +27,4 @@
 #include <VBox/err.h>
 
-#include <atlcom.h>
-
 
 class ComEventDesc
@@ -42,5 +40,5 @@
  }
 
- void init(const char* name, int argc)
+ void init(const char *name, int argc)
  {
    // copies content
@@ -49,10 +47,10 @@
    if (mArgs)
      delete [] mArgs;
-   mArgs = new CComVariant[mArgc];
+   mArgs = new tagVARIANT[mArgc];
    mPos = argc - 1;
  }
 
  template <class T>
- ComEventDesc& add(T v)
+ ComEventDesc &add(T v)
  {
    Assert(mPos>= 0);
@@ -65,5 +63,5 @@
  com::Utf8Str mName;
  int          mArgc;
- CComVariant* mArgs;
+ tagVARIANT  *mArgs;
  int          mPos;
 
@@ -79,5 +77,5 @@
     HRESULT init(const com::Guid &aGuid);
     HRESULT lookup(com::Utf8Str &aName, DISPID *did);
-    HRESULT fire(IDispatch* aObj, ComEventDesc& desc, CComVariant *pResult);
+    HRESULT fire(IDispatch *aObj, ComEventDesc &desc, tagVARIANT *pResult);
 
 private:
