Commit in reactos on MAIN
include/wine/objidl.h+2-21.5 -> 1.6
lib/oleaut32/Makefile.in+7-81.6 -> 1.7
            /oaidl_p.c+15-61.1 -> 1.2
            /olefont.c+184-721.1 -> 1.2
            /tmarshal.c+213-1421.2 -> 1.3
            /typelib.c+172-1081.2 -> 1.3
            /typelib.h+21-151.1 -> 1.2
            /typelib2.c+269-1011.2 -> 1.3
lib/uuid/uuid.c+51.2 -> 1.3
w32api/include/oaidl.h+415-31.7 -> 1.8
              /objidl.h+2-21.3 -> 1.4
              /ocidl.h+491.3 -> 1.4
              /oleauto.h+21.11 -> 1.12
              /rpc.h+91.2 -> 1.3
              /rpcndr.h+31.3 -> 1.4
              /rpcproxy.h+111.2 -> 1.3
+1379-459
16 modified files
- Get full OLEAUT32 to compile.

reactos/include/wine
objidl.h 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- objidl.h	31 Oct 2004 02:19:52 -0000	1.5
+++ objidl.h	1 Dec 2004 20:06:14 -0000	1.6
@@ -813,11 +813,11 @@
 	STDMETHOD_(ULONG,Release)(THIS) PURE;
 	STDMETHOD(Connect)(THIS_ LPUNKNOWN) PURE;
 	STDMETHOD_(void,Disconnect)(THIS) PURE;
-	STDMETHOD(Invoke)(THIS_ RPCOLEMESSAGE*,LPRPCSTUBBUFFER) PURE;
+	STDMETHOD(Invoke)(THIS_ RPCOLEMESSAGE*,LPRPCCHANNELBUFFER) PURE;
 	STDMETHOD_(LPRPCSTUBBUFFER,IsIIDSupported)(THIS_ REFIID) PURE;
 	STDMETHOD_(ULONG,CountRefs)(THIS) PURE;
 	STDMETHOD(DebugServerQueryInterface)(THIS_ PVOID*) PURE;
-	STDMETHOD(DebugServerRelease)(THIS_ PVOID) PURE;
+	STDMETHOD_(VOID,DebugServerRelease)(THIS_ PVOID) PURE;
 };
 #undef INTERFACE
 

reactos/lib/oleaut32
Makefile.in 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- Makefile.in	16 Oct 2004 20:27:36 -0000	1.6
+++ Makefile.in	1 Dec 2004 20:06:15 -0000	1.7
@@ -15,22 +15,21 @@
 	connpt.c \
 	dispatch.c \
 	hash.c \
+	oaidl_p.c \
 	oleaut.c \
+	olefont.c \
 	olepicture.c \
+	regsvr.c \
 	safearray.c \
 	stubs.c \
+	tmarshal.c \
+	typelib.c \
+	typelib2.c \
+	usrmarshal.c \
 	varformat.c \
 	variant.c \
 	vartype.c
 
-#	regsvr.c \
-#	olefont.c \
-#	tmarshal.c \
-#	usrmarshal.c \
-#	oaidl_p.c \
-#	typelib.c \
-#	typelib2.c \
-
 C_SRCS16 = \
 	ole2disp.c \
 	typelib16.c

reactos/lib/oleaut32
oaidl_p.c 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- oaidl_p.c	7 Feb 2004 18:53:58 -0000	1.1
+++ oaidl_p.c	1 Dec 2004 20:06:15 -0000	1.2
@@ -1,5 +1,14 @@
-/* this ALWAYS GENERATED file contains the proxy stub code */
+/* This file contains the proxy/stub code for core COM interfaces.
 
+   It is usually generated directly by MIDL, however this file has
+   been tweaked since then to account for slight differences in the way
+   gcc and MSVC++ compile it. In particular, in some functions REFIIDs
+   declared on the stack have been converted to plain IID* in order to eliminate
+   the constness of the REFIID type, ensuring that the zero initializer is not
+   discarded.
+
+   Therefore, please do not regenerate this file.
+*/
 
 /* File created by MIDL compiler version 5.01.0164 */
 /* at Tue Jan 07 22:24:52 2003
@@ -436,7 +445,7 @@
     LCID lcid;
     DISPID __RPC_FAR *rgDispId;
     LPOLESTR __RPC_FAR *rgszNames;
-    REFIID riid = 0;
+    IID* riid = 0;
     
 NdrStubInitialize(
                      _pRpcMessage,
@@ -726,7 +735,7 @@
     VARIANT __RPC_FAR *pVarResult;
     VARIANTARG __RPC_FAR *rgVarRef;
     UINT __RPC_FAR *rgVarRefIdx;
-    REFIID riid = 0;
+    IID* riid = 0;
     
 NdrStubInitialize(
                      _pRpcMessage,
@@ -4039,7 +4048,7 @@
     HRESULT _RetVal;
     MIDL_STUB_MESSAGE _StubMsg;
     IUnknown __RPC_FAR *__RPC_FAR *ppvObj;
-    REFIID riid = 0;
+    IID* riid = 0;
     
 NdrStubInitialize(
                      _pRpcMessage,
@@ -10751,7 +10760,7 @@
 {
     HRESULT _RetVal;
     MIDL_STUB_MESSAGE _StubMsg;
-    REFIID riid = 0;
+    IID* riid = 0;
     
 NdrStubInitialize(
                      _pRpcMessage,
@@ -10931,7 +10940,7 @@
     MIDL_STUB_MESSAGE _StubMsg;
     ITypeInfo __RPC_FAR *pTypeInfo;
     IUnknown __RPC_FAR *__RPC_FAR *ppv;
-    REFIID riid = 0;
+    IID* riid = 0;
     
 NdrStubInitialize(
                      _pRpcMessage,

reactos/lib/oleaut32
olefont.c 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- olefont.c	7 Feb 2004 18:53:58 -0000	1.1
+++ olefont.c	1 Dec 2004 20:06:15 -0000	1.2
@@ -24,16 +24,18 @@
 #include <stdarg.h>
 #include <string.h>
 
+#define COBJMACROS
 #define NONAMELESSUNION
 #define NONAMELESSSTRUCT
+
 #include "winerror.h"
 #include "windef.h"
 #include "winbase.h"
 #include "wingdi.h"
 #include "winuser.h"
 #include "wine/unicode.h"
-#include "oleauto.h"    /* for SysAllocString(....) */
 #include "objbase.h"
+#include "oleauto.h"    /* for SysAllocString(....) */
 #include "ole2.h"
 #include "olectl.h"
 #include "wine/debug.h"
@@ -61,12 +63,12 @@
    * The first two are supported by the first vtable, the next two are
    * supported by the second table and the last two have their own.
    */
-  ICOM_VTABLE(IFont)*				lpvtbl1;
-  ICOM_VTABLE(IDispatch)*			lpvtbl2;
-  ICOM_VTABLE(IPersistStream)*			lpvtbl3;
-  ICOM_VTABLE(IConnectionPointContainer)*	lpvtbl4;
-  ICOM_VTABLE(IPersistPropertyBag)*		lpvtbl5;
-  ICOM_VTABLE(IPersistStreamInit)*		lpvtbl6;
+  IFontVtbl*				lpvtbl1;
+  IDispatchVtbl*			lpvtbl2;
+  IPersistStreamVtbl*			lpvtbl3;
+  IConnectionPointContainerVtbl*	lpvtbl4;
+  IPersistPropertyBagVtbl*		lpvtbl5;
+  IPersistStreamInitVtbl*		lpvtbl6;
   /*
    * Reference count for that instance of the class.
    */
@@ -102,7 +104,6 @@
  * There is a version to accomodate all of the VTables implemented
  * by this object.
  */
-#define _ICOM_THIS(class,name) class* this = (class*)name
 #define _ICOM_THIS_From_IDispatch(class, name) class* this = (class*)(((char*)name)-sizeof(void*))
 #define _ICOM_THIS_From_IPersistStream(class, name) class* this = (class*)(((char*)name)-2*sizeof(void*))
 #define _ICOM_THIS_From_IConnectionPointContainer(class, name) class* this = (class*)(((char*)name)-3*sizeof(void*))
@@ -218,9 +219,8 @@
 /*
  * Virtual function tables for the OLEFontImpl class.
  */
-static ICOM_VTABLE(IFont) OLEFontImpl_VTable =
+static IFontVtbl OLEFontImpl_VTable =
 {
-  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
   OLEFontImpl_QueryInterface,
   OLEFontImpl_AddRef,
   OLEFontImpl_Release,
@@ -250,9 +250,8 @@
   OLEFontImpl_SetHdc
 };
 
-static ICOM_VTABLE(IDispatch) OLEFontImpl_IDispatch_VTable =
+static IDispatchVtbl OLEFontImpl_IDispatch_VTable =
 {
-  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
   OLEFontImpl_IDispatch_QueryInterface,
   OLEFontImpl_IDispatch_AddRef,
   OLEFontImpl_IDispatch_Release,
@@ -262,9 +261,8 @@
   OLEFontImpl_Invoke
 };
 
-static ICOM_VTABLE(IPersistStream) OLEFontImpl_IPersistStream_VTable =
+static IPersistStreamVtbl OLEFontImpl_IPersistStream_VTable =
 {
-  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
   OLEFontImpl_IPersistStream_QueryInterface,
   OLEFontImpl_IPersistStream_AddRef,
   OLEFontImpl_IPersistStream_Release,
@@ -275,10 +273,9 @@
   OLEFontImpl_GetSizeMax
 };
 
-static ICOM_VTABLE(IConnectionPointContainer)
+static IConnectionPointContainerVtbl
      OLEFontImpl_IConnectionPointContainer_VTable =
 {
-  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
   OLEFontImpl_IConnectionPointContainer_QueryInterface,
   OLEFontImpl_IConnectionPointContainer_AddRef,
   OLEFontImpl_IConnectionPointContainer_Release,
@@ -286,8 +283,8 @@
   OLEFontImpl_FindConnectionPoint
 };
 
-static ICOM_VTABLE(IPersistPropertyBag) OLEFontImpl_IPersistPropertyBag_VTable;
-static ICOM_VTABLE(IPersistStreamInit) OLEFontImpl_IPersistStreamInit_VTable;
+static IPersistPropertyBagVtbl OLEFontImpl_IPersistPropertyBag_VTable;
+static IPersistStreamInitVtbl OLEFontImpl_IPersistStreamInit_VTable;
 /******************************************************************************
  *		OleCreateFontIndirect	[OLEAUT32.420]
  */
@@ -311,10 +308,10 @@
   if (!lpFontDesc) {
     FONTDESC fd;
 
-    WCHAR fname[] = { 'S','y','s','t','e','m',0 };
+    static const WCHAR fname[] = { 'S','y','s','t','e','m',0 };
 
     fd.cbSizeofstruct = sizeof(fd);
-    fd.lpstrName      = fname;
+    fd.lpstrName      = (WCHAR*)fname;
     fd.cySize.s.Lo    = 80000;
     fd.cySize.s.Hi    = 0;
     fd.sWeight 	      = 0;
@@ -476,7 +473,7 @@
   REFIID  riid,
   void**  ppvObject)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%s, %p)\n", this, debugstr_guid(riid), ppvObject);
 
   /*
@@ -530,11 +527,9 @@
 ULONG WINAPI OLEFontImpl_AddRef(
   IFont* iface)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(ref=%ld)\n", this, this->ref);
-  this->ref++;
-
-  return this->ref;
+  return InterlockedIncrement(&this->ref);
 }
 
 /************************************************************************
@@ -545,25 +540,21 @@
 ULONG WINAPI OLEFontImpl_Release(
       IFont* iface)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
+  ULONG ret;
   TRACE("(%p)->(ref=%ld)\n", this, this->ref);
 
   /*
    * Decrease the reference count on this object.
    */
-  this->ref--;
+  ret = InterlockedDecrement(&this->ref);
 
   /*
    * If the reference count goes down to 0, perform suicide.
    */
-  if (this->ref==0)
-  {
-    OLEFontImpl_Destroy(this);
-
-    return 0;
-  }
+  if (ret==0) OLEFontImpl_Destroy(this);
 
-  return this->ref;
+  return ret;
 }
 
 /************************************************************************
@@ -575,7 +566,7 @@
   IFont*  iface,
   BSTR* pname)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, pname);
   /*
    * Sanity check.
@@ -600,7 +591,7 @@
   IFont* iface,
   BSTR name)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, name);
 
   if (this->description.lpstrName==0)
@@ -635,7 +626,7 @@
   IFont* iface,
   CY*    psize)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, psize);
 
   /*
@@ -659,7 +650,7 @@
   IFont* iface,
   CY     size)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%ld)\n", this, size.s.Lo);
   this->description.cySize.s.Hi = 0;
   this->description.cySize.s.Lo = size.s.Lo;
@@ -677,7 +668,7 @@
   IFont*  iface,
   BOOL* pbold)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, pbold);
   /*
    * Sanity check
@@ -699,7 +690,7 @@
   IFont* iface,
   BOOL bold)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%d)\n", this, bold);
   this->description.sWeight = bold ? FW_BOLD : FW_NORMAL;
   OLEFont_SendNotify(this, DISPID_FONT_BOLD);
@@ -716,7 +707,7 @@
   IFont*  iface,
   BOOL* pitalic)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, pitalic);
   /*
    * Sanity check
@@ -738,7 +729,7 @@
   IFont* iface,
   BOOL italic)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%d)\n", this, italic);
 
   this->description.fItalic = italic;
@@ -756,7 +747,7 @@
   IFont*  iface,
   BOOL* punderline)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, punderline);
 
   /*
@@ -779,7 +770,7 @@
   IFont* iface,
   BOOL underline)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%d)\n", this, underline);
 
   this->description.fUnderline = underline;
@@ -797,7 +788,7 @@
   IFont*  iface,
   BOOL* pstrikethrough)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, pstrikethrough);
 
   /*
@@ -820,7 +811,7 @@
  IFont* iface,
  BOOL strikethrough)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%d)\n", this, strikethrough);
 
   this->description.fStrikethrough = strikethrough;
@@ -838,7 +829,7 @@
   IFont* iface,
   short* pweight)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, pweight);
 
   /*
@@ -861,7 +852,7 @@
   IFont* iface,
   short  weight)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%d)\n", this, weight);
 
   this->description.sWeight = weight;
@@ -879,7 +870,7 @@
   IFont* iface,
   short* pcharset)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, pcharset);
 
   /*
@@ -902,7 +893,7 @@
   IFont* iface,
   short charset)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%d)\n", this, charset);
 
   this->description.sCharset = charset;
@@ -920,7 +911,7 @@
   IFont*   iface,
   HFONT* phfont)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, phfont);
   if (phfont==NULL)
     return E_POINTER;
@@ -980,7 +971,7 @@
   LOGFONTW logFont;
   INT      fontHeight;
   CY       cySize;
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p)\n", this, ppfont);
 
   if (ppfont == NULL)
@@ -1060,7 +1051,7 @@
   long   cyLogical,
   long   cyHimetric)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%ld, %ld)\n", this, cyLogical, cyHimetric);
 
   this->cyLogical  = cyLogical;
@@ -1091,7 +1082,7 @@
   IFont*  iface,
   HFONT hfont)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p) (lock=%ld)\n", this, hfont, this->fontLock);
 
   if ( (hfont == 0) ||
@@ -1112,7 +1103,7 @@
   IFont*  iface,
   HFONT hfont)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   TRACE("(%p)->(%p) (lock=%ld)\n", this, hfont, this->fontLock);
 
   if ( (hfont == 0) ||
@@ -1142,7 +1133,7 @@
   IFont* iface,
   HDC  hdc)
 {
-  _ICOM_THIS(OLEFontImpl, iface);
+  OLEFontImpl *this = (OLEFontImpl *)iface;
   FIXME("(%p)->(%p): Stub\n", this, hdc);
   return E_NOTIMPL;
 }
@@ -1214,7 +1205,7 @@
   LCID        lcid,
   ITypeInfo** ppTInfo)
 {
-  WCHAR stdole32tlb[] = {'s','t','d','o','l','e','3','2','.','t','l','b',0};
+  static const WCHAR stdole32tlb[] = {'s','t','d','o','l','e','3','2','.','t','l','b',0};
   ITypeLib *tl;
   HRESULT hres;
 
@@ -1841,8 +1832,132 @@
 static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
    IPersistPropertyBag *iface, IPropertyBag* pPropBag, IErrorLog* pErrorLog
 ) {
-  FIXME("(%p,%p,%p), stub!\n", iface, pPropBag, pErrorLog);
-  return E_FAIL;
+/* (from Visual Basic 6 property bag)
+         Name            =   "MS Sans Serif"
+         Size            =   13.8
+         Charset         =   0
+         Weight          =   400
+         Underline       =   0   'False
+         Italic          =   0   'False
+         Strikethrough   =   0   'False
+*/
+    static const WCHAR sAttrName[] = {'N','a','m','e',0};
+    static const WCHAR sAttrSize[] = {'S','i','z','e',0};
+    static const WCHAR sAttrCharset[] = {'C','h','a','r','s','e','t',0};
+    static const WCHAR sAttrWeight[] = {'W','e','i','g','h','t',0};
+    static const WCHAR sAttrUnderline[] = {'U','n','d','e','r','l','i','n','e',0};
+    static const WCHAR sAttrItalic[] = {'I','t','a','l','i','c',0};
+    static const WCHAR sAttrStrikethrough[] = {'S','t','r','i','k','e','t','h','r','o','u','g','h',0};
+    VARIANT rawAttr;
+    VARIANT valueAttr;
+    HRESULT iRes = S_OK;
+    _ICOM_THIS_From_IPersistPropertyBag(IFont, iface);
+
+    VariantInit(&rawAttr);
+    VariantInit(&valueAttr);
+
+    if (iRes == S_OK) {
+        iRes = IPropertyBag_Read(pPropBag, sAttrName, &rawAttr, pErrorLog);
+        if (iRes == S_OK)
+        {
+            iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BSTR);
+            if (iRes == S_OK)
+                iRes = IFont_put_Name(this, V_BSTR(&valueAttr));
+        }
+        else if (iRes == E_INVALIDARG)
+            iRes = S_OK;
+        VariantClear(&rawAttr);
+        VariantClear(&valueAttr);
+    }
+
+    if (iRes == S_OK) {
+        iRes = IPropertyBag_Read(pPropBag, sAttrSize, &rawAttr, pErrorLog);
+        if (iRes == S_OK)
+        {
+            iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_CY);
+            if (iRes == S_OK)
+                iRes = IFont_put_Size(this, V_CY(&valueAttr));
+        }
+        else if (iRes == E_INVALIDARG)
+            iRes = S_OK;
+        VariantClear(&rawAttr);
+        VariantClear(&valueAttr);
+    }
+
+    if (iRes == S_OK) {
+        iRes = IPropertyBag_Read(pPropBag, sAttrCharset, &rawAttr, pErrorLog);
+        if (iRes == S_OK)
+        {
+            iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_I2);
+            if (iRes == S_OK)
+                iRes = IFont_put_Charset(this, V_I2(&valueAttr));
+        }
+        else if (iRes == E_INVALIDARG)
+            iRes = S_OK;
+        VariantClear(&rawAttr);
+        VariantClear(&valueAttr);
+    }
+
+    if (iRes == S_OK) {
+        iRes = IPropertyBag_Read(pPropBag, sAttrWeight, &rawAttr, pErrorLog);
+        if (iRes == S_OK)
+        {
+            iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_I2);
+            if (iRes == S_OK)
+                iRes = IFont_put_Weight(this, V_I2(&valueAttr));
+        }
+        else if (iRes == E_INVALIDARG)
+            iRes = S_OK;
+        VariantClear(&rawAttr);
+        VariantClear(&valueAttr);
+
+    }
+
+    if (iRes == S_OK) {
+        iRes = IPropertyBag_Read(pPropBag, sAttrUnderline, &rawAttr, pErrorLog);
+        if (iRes == S_OK)
+        {
+            iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL);
+            if (iRes == S_OK)
+                iRes = IFont_put_Underline(this, V_BOOL(&valueAttr));
+        }
+        else if (iRes == E_INVALIDARG)
+            iRes = S_OK;
+        VariantClear(&rawAttr);
+        VariantClear(&valueAttr);
+    }
+
+    if (iRes == S_OK) {
+        iRes = IPropertyBag_Read(pPropBag, sAttrItalic, &rawAttr, pErrorLog);
+        if (iRes == S_OK)
+        {
+            iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL);
+            if (iRes == S_OK)
+                iRes = IFont_put_Italic(this, V_BOOL(&valueAttr));
+        }
+        else if (iRes == E_INVALIDARG)
+            iRes = S_OK;
+        VariantClear(&rawAttr);
+        VariantClear(&valueAttr);
+    }
+
+    if (iRes == S_OK) {
+        iRes = IPropertyBag_Read(pPropBag, sAttrStrikethrough, &rawAttr, pErrorLog);
+        if (iRes == S_OK)
+        {
+            iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL);
+            if (iRes == S_OK)
+                IFont_put_Strikethrough(this, V_BOOL(&valueAttr));
+        }
+        else if (iRes == E_INVALIDARG)
+            iRes = S_OK;
+        VariantClear(&rawAttr);
+        VariantClear(&valueAttr);
+    }
+
+    if (FAILED(iRes))
+        WARN("-- 0x%08lx\n", iRes);
+    return iRes;
 }
 
 static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Save(
@@ -1853,9 +1968,8 @@
   return E_FAIL;
 }
 
-static ICOM_VTABLE(IPersistPropertyBag) OLEFontImpl_IPersistPropertyBag_VTable = 
+static IPersistPropertyBagVtbl OLEFontImpl_IPersistPropertyBag_VTable = 
 {
-  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
   OLEFontImpl_IPersistPropertyBag_QueryInterface,
   OLEFontImpl_IPersistPropertyBag_AddRef,
   OLEFontImpl_IPersistPropertyBag_Release,
@@ -1932,9 +2046,8 @@
   return S_OK;
 }
 
-static ICOM_VTABLE(IPersistStreamInit) OLEFontImpl_IPersistStreamInit_VTable = 
+static IPersistStreamInitVtbl OLEFontImpl_IPersistStreamInit_VTable = 
 {
-  ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
   OLEFontImpl_IPersistStreamInit_QueryInterface,
   OLEFontImpl_IPersistStreamInit_AddRef,
   OLEFontImpl_IPersistStreamInit_Release,
@@ -1953,13 +2066,13 @@
 typedef struct
 {
     /* IUnknown fields */
-    ICOM_VFIELD(IClassFactory);
+    IClassFactoryVtbl          *lpVtbl;
     DWORD                       ref;
 } IClassFactoryImpl;
 
 static HRESULT WINAPI
 SFCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
-	ICOM_THIS(IClassFactoryImpl,iface);
+	IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
 
 	FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
 	return E_NOINTERFACE;
@@ -1967,14 +2080,14 @@
 
 static ULONG WINAPI
 SFCF_AddRef(LPCLASSFACTORY iface) {
-	ICOM_THIS(IClassFactoryImpl,iface);
-	return ++(This->ref);
+	IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+	return InterlockedIncrement(&This->ref);
 }
 
 static ULONG WINAPI SFCF_Release(LPCLASSFACTORY iface) {
-	ICOM_THIS(IClassFactoryImpl,iface);
+	IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
 	/* static class, won't be  freed */
-	return --(This->ref);
+	return InterlockedDecrement(&This->ref);
 }
 
 static HRESULT WINAPI SFCF_CreateInstance(
@@ -1985,13 +2098,12 @@
 }
 
 static HRESULT WINAPI SFCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
-	ICOM_THIS(IClassFactoryImpl,iface);
+	IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
 	FIXME("(%p)->(%d),stub!\n",This,dolock);
 	return S_OK;
 }
 
-static ICOM_VTABLE(IClassFactory) SFCF_Vtbl = {
-	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+static IClassFactoryVtbl SFCF_Vtbl = {
 	SFCF_QueryInterface,
 	SFCF_AddRef,
 	SFCF_Release,

reactos/lib/oleaut32
tmarshal.c 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- tmarshal.c	26 Sep 2004 14:34:22 -0000	1.2
+++ tmarshal.c	1 Dec 2004 20:06:15 -0000	1.3
@@ -3,6 +3,9 @@
  *
  *	Copyright 2002	Marcus Meissner
  *
+ * The olerelay debug channel allows you to see calls marshalled by
+ * the typelib marshaller. It is not a generic COM relaying system.
+ *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
@@ -50,6 +53,8 @@
 WINE_DEFAULT_DEBUG_CHANNEL(ole);
 WINE_DECLARE_DEBUG_CHANNEL(olerelay);
 
+#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
+
 typedef struct _marshal_state {
     LPBYTE	base;
     int		size;
@@ -59,6 +64,14 @@
     IID		iid;	/* HACK: for VT_VOID */
 } marshal_state;
 
+/* used in the olerelay code to avoid having the L"" stuff added by debugstr_w */
+static char *relaystr(WCHAR *in) {
+    char *tmp = (char *)debugstr_w(in);
+    tmp += 2;
+    tmp[strlen(tmp)-1] = '\0';
+    return tmp;
+}
+
 static HRESULT
 xbuf_add(marshal_state *buf, LPBYTE stuff, DWORD size) {
     while (buf->size - buf->curoff < size) {
@@ -274,6 +287,8 @@
     /*NOTREACHED*/
 }
 
+#ifdef __i386__
+
 #include "pshpack1.h"
 
 typedef struct _TMAsmProxy {
@@ -289,74 +304,99 @@
 
 #include "poppack.h"
 
+#else /* __i386__ */
+# error You need to implement stubless proxies for your architecture
+#endif
+
 typedef struct _TMProxyImpl {
-    DWORD				*lpvtbl;
+    LPVOID				*lpvtbl;
     IRpcProxyBufferVtbl	*lpvtbl2;
-    DWORD				ref;
+    ULONG				ref;
 
     TMAsmProxy				*asmstubs;
     ITypeInfo*				tinfo;
     IRpcChannelBuffer*			chanbuf;
     IID					iid;
+    CRITICAL_SECTION	crit;
 } TMProxyImpl;
 
 static HRESULT WINAPI
-TMProxyImpl_QueryInterface(LPRPCPROXYBUFFER iface, REFIID riid, LPVOID *ppv) {
+TMProxyImpl_QueryInterface(LPRPCPROXYBUFFER iface, REFIID riid, LPVOID *ppv)
+{
     TRACE("()\n");
     if (IsEqualIID(riid,&IID_IUnknown)||IsEqualIID(riid,&IID_IRpcProxyBuffer)) {
-	*ppv = (LPVOID)iface;
-	IRpcProxyBuffer_AddRef(iface);
-	return S_OK;
+        *ppv = (LPVOID)iface;
+        IRpcProxyBuffer_AddRef(iface);
+        return S_OK;
     }
     FIXME("no interface for %s\n",debugstr_guid(riid));
     return E_NOINTERFACE;
 }
 
 static ULONG WINAPI
-TMProxyImpl_AddRef(LPRPCPROXYBUFFER iface) {
+TMProxyImpl_AddRef(LPRPCPROXYBUFFER iface)
+{
     ICOM_THIS_MULTI(TMProxyImpl,lpvtbl2,iface);
 
     TRACE("()\n");
-    This->ref++;
-    return This->ref;
+
+    return InterlockedIncrement(&This->ref);
 }
 
 static ULONG WINAPI
-TMProxyImpl_Release(LPRPCPROXYBUFFER iface) {
+TMProxyImpl_Release(LPRPCPROXYBUFFER iface)
+{
+    ULONG refs;
     ICOM_THIS_MULTI(TMProxyImpl,lpvtbl2,iface);
 
     TRACE("()\n");
-    This->ref--;
-    if (This->ref) return This->ref;
-    if (This->chanbuf) IRpcChannelBuffer_Release(This->chanbuf);
-    HeapFree(GetProcessHeap(),0,This);
-    return 0;
+
+    refs = InterlockedDecrement(&This->ref);
+    if (!refs)
+    {
+        DeleteCriticalSection(&This->crit);
+        if (This->chanbuf) IRpcChannelBuffer_Release(This->chanbuf);
+        VirtualFree(This->asmstubs, 0, MEM_RELEASE);
+        CoTaskMemFree(This);
+    }
+    return refs;
 }
 
 static HRESULT WINAPI
 TMProxyImpl_Connect(
-    LPRPCPROXYBUFFER iface,IRpcChannelBuffer* pRpcChannelBuffer
-) {
-    ICOM_THIS_MULTI(TMProxyImpl,lpvtbl2,iface);
+    LPRPCPROXYBUFFER iface,IRpcChannelBuffer* pRpcChannelBuffer)
+{
+    ICOM_THIS_MULTI(TMProxyImpl, lpvtbl2, iface);
 
-    TRACE("(%p)\n",pRpcChannelBuffer);
+    TRACE("(%p)\n", pRpcChannelBuffer);
+
+    EnterCriticalSection(&This->crit);
+
+    IRpcChannelBuffer_AddRef(pRpcChannelBuffer);
     This->chanbuf = pRpcChannelBuffer;
-    IRpcChannelBuffer_AddRef(This->chanbuf);
+
+    LeaveCriticalSection(&This->crit);
+
     return S_OK;
 }
 
 static void WINAPI
-TMProxyImpl_Disconnect(LPRPCPROXYBUFFER iface) {
-    ICOM_THIS_MULTI(TMProxyImpl,lpvtbl2,iface);
+TMProxyImpl_Disconnect(LPRPCPROXYBUFFER iface)
+{
+    ICOM_THIS_MULTI(TMProxyImpl, lpvtbl2, iface);
+
+    TRACE("()\n");
+
+    EnterCriticalSection(&This->crit);
 
-    FIXME("()\n");
     IRpcChannelBuffer_Release(This->chanbuf);
     This->chanbuf = NULL;
+
+    LeaveCriticalSection(&This->crit);
 }
 
 
-static ICOM_VTABLE(IRpcProxyBuffer) tmproxyvtable = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+static IRpcProxyBufferVtbl tmproxyvtable = {
     TMProxyImpl_QueryInterface,
     TMProxyImpl_AddRef,
     TMProxyImpl_Release,
@@ -365,7 +405,7 @@
 };
 
 /* how much space do we use on stack in DWORD steps. */
-int const
+int
 _argsize(DWORD vt) {
     switch (vt) {
     case VT_DATE:
@@ -411,8 +451,8 @@
     BOOL		dealloc,
     TYPEDESC		*tdesc,
     DWORD		*arg,
-    marshal_state	*buf
-) {
+    marshal_state	*buf)
+{
     HRESULT hres = S_OK;
 
     TRACE("(tdesc.vt %d)\n",tdesc->vt);
@@ -429,7 +469,7 @@
     case VT_UI2:
     case VT_UI1:
 	hres = S_OK;
-	if (debugout) MESSAGE("%lx",*arg);
+	if (debugout) TRACE_(olerelay)("%lx",*arg);
 	if (writeit)
 	    hres = xbuf_add(buf,(LPBYTE)arg,sizeof(DWORD));
 	return hres;
@@ -438,7 +478,7 @@
 	VARIANT		*vt = (VARIANT*)arg;
 	DWORD		vttype = V_VT(vt);
 
-	if (debugout) MESSAGE("Vt(%ld)(",vttype);
+	if (debugout) TRACE_(olerelay)("Vt(%ld)(",vttype);
 	tdesc2.vt = vttype;
 	if (writeit) {
 	    hres = xbuf_add(buf,(LPBYTE)&vttype,sizeof(vttype));
@@ -446,15 +486,15 @@
 	}
 	/* need to recurse since we need to free the stuff */
 	hres = serialize_param(tinfo,writeit,debugout,dealloc,&tdesc2,&(V_I4(vt)),buf);
-	if (debugout) MESSAGE(")");
+	if (debugout) TRACE_(olerelay)(")");
 	return hres;
     }
     case VT_BSTR: {
 	if (debugout) {
 	    if (arg)
-		    MESSAGE("%s",debugstr_w((BSTR)*arg));
+		    TRACE_(olerelay)("%s",relaystr((BSTR)*arg));
 	    else
-		    MESSAGE("<bstr NULL>");
+		    TRACE_(olerelay)("<bstr NULL>");
 	}
 	if (writeit) {
 	    if (!*arg) {
@@ -478,7 +518,7 @@
     case VT_PTR: {
 	DWORD cookie;
 
-	if (debugout) MESSAGE("*");
+	if (debugout) TRACE_(olerelay)("*");
 	if (writeit) {
 	    cookie = *arg ? 0x42424242 : 0;
 	    hres = xbuf_add(buf,(LPBYTE)&cookie,sizeof(cookie));
@@ -486,7 +526,7 @@
 		return hres;
 	}
 	if (!*arg) {
-	    if (debugout) MESSAGE("NULL");
+	    if (debugout) TRACE_(olerelay)("NULL");
 	    return S_OK;
 	}
 	hres = serialize_param(tinfo,writeit,debugout,dealloc,tdesc->u.lptdesc,(DWORD*)*arg,buf);
@@ -494,17 +534,17 @@
 	return hres;
     }
     case VT_UNKNOWN:
-	if (debugout) MESSAGE("unk(0x%lx)",*arg);
+	if (debugout) TRACE_(olerelay)("unk(0x%lx)",*arg);
 	if (writeit)
 	    hres = _marshal_interface(buf,&IID_IUnknown,(LPUNKNOWN)*arg);
 	return hres;
     case VT_DISPATCH:
-	if (debugout) MESSAGE("idisp(0x%lx)",*arg);
+	if (debugout) TRACE_(olerelay)("idisp(0x%lx)",*arg);
 	if (writeit)
 	    hres = _marshal_interface(buf,&IID_IDispatch,(LPUNKNOWN)*arg);
 	return hres;
     case VT_VOID:
-	if (debugout) MESSAGE("<void>");
+	if (debugout) TRACE_(olerelay)("<void>");
 	return S_OK;
     case VT_USERDEFINED: {
 	ITypeInfo	*tinfo2;
@@ -524,7 +564,7 @@
 	    break;
 	case TKIND_RECORD: {
 	    int i;
-	    if (debugout) MESSAGE("{");
+	    if (debugout) TRACE_(olerelay)("{");
 	    for (i=0;i<tattr->cVars;i++) {
 		VARDESC *vdesc;
 		ELEMDESC *elem2;
@@ -543,7 +583,7 @@
 		    ERR("Need more names!\n");
 		}
 		if (!hres && debugout)
-		    MESSAGE("%s=",debugstr_w(names[0]));
+		    TRACE_(olerelay)("%s=",relaystr(names[0]));
 		*/
 		elem2 = &vdesc->elemdescVar;
 		tdesc2 = &elem2->tdesc;
@@ -559,11 +599,11 @@
 		if (hres!=S_OK)
 		    return hres;
 		if (debugout && (i<(tattr->cVars-1)))
-		    MESSAGE(",");
+		    TRACE_(olerelay)(",");
 	    }
 	    if (buf->thisisiid && (tattr->cbSizeInstance==sizeof(GUID)))
 		memcpy(&(buf->iid),arg,sizeof(buf->iid));
-	    if (debugout) MESSAGE("}");
+	    if (debugout) TRACE_(olerelay)("}");
 	    break;
 	}
 	default:
@@ -578,19 +618,19 @@
 	ARRAYDESC *adesc = tdesc->u.lpadesc;
 	int i, arrsize = 1;
 
-	if (debugout) MESSAGE("carr");
+	if (debugout) TRACE_(olerelay)("carr");
 	for (i=0;i<adesc->cDims;i++) {
-	    if (debugout) MESSAGE("[%ld]",adesc->rgbounds[i].cElements);
+	    if (debugout) TRACE_(olerelay)("[%ld]",adesc->rgbounds[i].cElements);
 	    arrsize *= adesc->rgbounds[i].cElements;
 	}
-	if (debugout) MESSAGE("[");
+	if (debugout) TRACE_(olerelay)("[");
 	for (i=0;i<arrsize;i++) {
 	    hres = serialize_param(tinfo, writeit, debugout, dealloc, &adesc->tdescElem, (DWORD*)((LPBYTE)arg+i*_xsize(&adesc->tdescElem)), buf);
 	    if (hres)
 		return hres;
-	    if (debugout && (i<arrsize-1)) MESSAGE(",");
+	    if (debugout && (i<arrsize-1)) TRACE_(olerelay)(",");
 	}
-	if (debugout) MESSAGE("]");
+	if (debugout) TRACE_(olerelay)("]");
 	return S_OK;
     }
     default:
@@ -607,8 +647,8 @@
     BOOL		dealloc,
     TYPEDESC		*tdesc,
     DWORD		*arg,
-    marshal_state	*buf
-) {
+    marshal_state	*buf)
+{
     HRESULT	hres;
     DWORD	cookie;
 
@@ -626,11 +666,11 @@
 	    return hres;
     }
     if (!*arg) {
-	if (debugout) MESSAGE("<lpvoid NULL>");
+	if (debugout) TRACE_(olerelay)("<lpvoid NULL>");
 	return S_OK;
     }
     if (debugout)
-	MESSAGE("ppv(%p)",*(LPUNKNOWN*)*arg);
+	TRACE_(olerelay)("ppv(%p)",*(LPUNKNOWN*)*arg);
     if (writeit) {
 	hres = _marshal_interface(buf,&(buf->iid),*(LPUNKNOWN*)*arg);
 	if (hres)
@@ -649,8 +689,8 @@
     BOOL		dealloc,
     TYPEDESC		*tdesc,
     DWORD		*arg,
-    marshal_state	*buf
-) {
+    marshal_state	*buf)
+{
     DWORD	cookie;
     HRESULT	hres;
     DISPPARAMS	*disp;
@@ -668,7 +708,7 @@
 	    return hres;
     }
     if (!*arg) {
-	if (debugout) MESSAGE("<DISPPARAMS NULL>");
+	if (debugout) TRACE_(olerelay)("<DISPPARAMS NULL>");
 	return S_OK;
     }
     disp = (DISPPARAMS*)*arg;
@@ -677,7 +717,7 @@
 	if (hres)
 	    return hres;
     }
-    if (debugout) MESSAGE("D{");
+    if (debugout) TRACE_(olerelay)("D{");
     for (i=0;i<disp->cArgs;i++) {
 	TYPEDESC	vtdesc;
 
@@ -692,7 +732,7 @@
 	    buf
         );
 	if (debugout && (i<disp->cArgs-1))
-	    MESSAGE(",");
+	    TRACE_(olerelay)(",");
     }
     if (dealloc)
 	HeapFree(GetProcessHeap(),0,disp->rgvarg);
@@ -701,7 +741,7 @@
 	if (hres)
 	    return hres;
     }
-    if (debugout) MESSAGE("}{");
+    if (debugout) TRACE_(olerelay)("}{");
     for (i=0;i<disp->cNamedArgs;i++) {
 	TYPEDESC	vtdesc;
 
@@ -716,9 +756,9 @@
 	    buf
 	);
 	if (debugout && (i<disp->cNamedArgs-1))
-	    MESSAGE(",");
+	    TRACE_(olerelay)(",");
     }
-    if (debugout) MESSAGE("}");
+    if (debugout) TRACE_(olerelay)("}");
     if (dealloc) {
 	HeapFree(GetProcessHeap(),0,disp->rgdispidNamedArgs);
 	HeapFree(GetProcessHeap(),0,disp);
@@ -734,8 +774,8 @@
     BOOL		alloc,
     TYPEDESC		*tdesc,
     DWORD		*arg,
-    marshal_state	*buf
-) {
+    marshal_state	*buf)
+{
     HRESULT hres = S_OK;
 
     TRACE("vt %d at %p\n",tdesc->vt,arg);
@@ -743,10 +783,10 @@
     while (1) {
 	switch (tdesc->vt) {
 	case VT_EMPTY:
-	    if (debugout) MESSAGE("<empty>");
+	    if (debugout) TRACE_(olerelay)("<empty>");
 	    return S_OK;
 	case VT_NULL:
-	    if (debugout) MESSAGE("<null>");
+	    if (debugout) TRACE_(olerelay)("<null>");
 	    return S_OK;
 	case VT_VARIANT: {
 	    VARIANT	*vt = (VARIANT*)arg;
@@ -762,9 +802,9 @@
 		memset(&tdesc2,0,sizeof(tdesc2));
 		tdesc2.vt = vttype;
 		V_VT(vt)  = vttype;
-	        if (debugout) MESSAGE("Vt(%ld)(",vttype);
+	        if (debugout) TRACE_(olerelay)("Vt(%ld)(",vttype);
 		hres = deserialize_param(tinfo, readit, debugout, alloc, &tdesc2, &(V_I4(vt)), buf);
-		MESSAGE(")");
+		TRACE_(olerelay)(")");
 		return hres;
 	    } else {
 		VariantInit(vt);
@@ -779,7 +819,7 @@
 		hres = xbuf_get(buf,(LPBYTE)arg,sizeof(DWORD));
 		if (hres) FIXME("Failed to read integer 4 byte\n");
 	    }
-	    if (debugout) MESSAGE("%lx",*arg);
+	    if (debugout) TRACE_(olerelay)("%lx",*arg);
 	    return hres;
 	case VT_BSTR: {
 	    WCHAR	*str;
@@ -793,7 +833,7 @@
 		}
 		if (len == -1) {
 		    *arg = 0;
-		    if (debugout) MESSAGE("<bstr NULL>");
+		    if (debugout) TRACE_(olerelay)("<bstr NULL>");
 		} else {
 		    str  = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,len+sizeof(WCHAR));
 		    hres = xbuf_get(buf,(LPBYTE)str,len);
@@ -802,7 +842,7 @@
 			return hres;
 		    }
 		    *arg = (DWORD)SysAllocStringLen(str,len);
-		    if (debugout) MESSAGE("%s",debugstr_w(str));
+		    if (debugout) TRACE_(olerelay)("%s",relaystr(str));
 		    HeapFree(GetProcessHeap(),0,str);
 		}
 	    } else {
@@ -823,11 +863,11 @@
 		    return hres;
 		}
 		if (cookie != 0x42424242) {
-		    if (debugout) MESSAGE("NULL");
+		    if (debugout) TRACE_(olerelay)("NULL");
 		    *arg = 0;
 		    return S_OK;
 		}
-		if (debugout) MESSAGE("*");
+		if (debugout) TRACE_(olerelay)("*");
 	    }
 	    if (alloc) {
 		if (derefhere)
@@ -846,17 +886,17 @@
 	    if (readit)
 		hres = _unmarshal_interface(buf,&IID_IUnknown,(LPUNKNOWN*)arg);
 	    if (debugout)
-		MESSAGE("unk(%p)",arg);
+		TRACE_(olerelay)("unk(%p)",arg);
 	    return hres;
 	case VT_DISPATCH:
 	    hres = S_OK;
 	    if (readit)
 		hres = _unmarshal_interface(buf,&IID_IDispatch,(LPUNKNOWN*)arg);
 	    if (debugout)
-		MESSAGE("idisp(%p)",arg);
+		TRACE_(olerelay)("idisp(%p)",arg);
 	    return hres;
 	case VT_VOID:
-	    if (debugout) MESSAGE("<void>");
+	    if (debugout) TRACE_(olerelay)("<void>");
 	    return S_OK;
 	case VT_USERDEFINED: {
 	    ITypeInfo	*tinfo2;
@@ -882,7 +922,7 @@
 		case TKIND_RECORD: {
 		    int i;
 
-		    if (debugout) MESSAGE("{");
+		    if (debugout) TRACE_(olerelay)("{");
 		    for (i=0;i<tattr->cVars;i++) {
 			VARDESC *vdesc;
 
@@ -900,11 +940,11 @@
 			    (DWORD*)(((LPBYTE)*arg)+vdesc->u.oInst),
 			    buf
 			);
-		        if (debugout && (i<tattr->cVars-1)) MESSAGE(",");
+		        if (debugout && (i<tattr->cVars-1)) TRACE_(olerelay)(",");
 		    }
 		    if (buf->thisisiid && (tattr->cbSizeInstance==sizeof(GUID)))
 			memcpy(&(buf->iid),(LPBYTE)*arg,sizeof(buf->iid));
-		    if (debugout) MESSAGE("}");
+		    if (debugout) TRACE_(olerelay)("}");
 		    break;
 		}
 		default:
@@ -973,7 +1013,7 @@
 	    return hres;
 	if (cookie != 0x42424242) {
 	    *(DWORD*)*arg = 0;
-	    if (debugout) MESSAGE("<lpvoid NULL>");
+	    if (debugout) TRACE_(olerelay)("<lpvoid NULL>");
 	    return S_OK;
 	}
     }
@@ -982,7 +1022,7 @@
 	if (hres)
 	    return hres;
     }
-    if (debugout) MESSAGE("ppv(%p)",(LPVOID)*arg);
+    if (debugout) TRACE_(olerelay)("ppv(%p)",(LPVOID)*arg);
     return S_OK;
 }
 
@@ -994,8 +1034,8 @@
     BOOL		alloc,
     TYPEDESC		*tdesc,
     DWORD		*arg,
-    marshal_state	*buf
-) {
+    marshal_state	*buf)
+{
     DWORD	cookie;
     DISPPARAMS	*disps;
     HRESULT	hres;
@@ -1011,7 +1051,7 @@
 	    return hres;
 	if (cookie == 0) {
 	    *arg = 0;
-	    if (debugout) MESSAGE("<DISPPARAMS NULL>");
+	    if (debugout) TRACE_(olerelay)("<DISPPARAMS NULL>");
 	    return S_OK;
 	}
     }
@@ -1025,7 +1065,7 @@
 	return hres;
     if (alloc)
         disps->rgvarg = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(VARIANT)*disps->cArgs);
-    if (debugout) MESSAGE("D{");
+    if (debugout) TRACE_(olerelay)("D{");
     for (i=0; i< disps->cArgs; i++) {
         TYPEDESC vdesc;
 
@@ -1040,7 +1080,7 @@
 	    buf
 	);
     }
-    if (debugout) MESSAGE("}{");
+    if (debugout) TRACE_(olerelay)("}{");
     hres = xbuf_get(buf, (LPBYTE)&disps->cNamedArgs, sizeof(disps->cNamedArgs));
     if (hres)
 	return hres;
@@ -1060,18 +1100,18 @@
 		(DWORD*)(disps->rgdispidNamedArgs+i),
 		buf
 	    );
-	    if (debugout && i<(disps->cNamedArgs-1)) MESSAGE(",");
+	    if (debugout && i<(disps->cNamedArgs-1)) TRACE_(olerelay)(",");
 	}
     }
-    if (debugout) MESSAGE("}");
+    if (debugout) TRACE_(olerelay)("}");
     return S_OK;
 }
 
 /* Searches function, also in inherited interfaces */
 static HRESULT
 _get_funcdesc(
-    ITypeInfo *tinfo, int iMethod, FUNCDESC **fdesc, BSTR *iname, BSTR *fname
-) {
+    ITypeInfo *tinfo, int iMethod, FUNCDESC **fdesc, BSTR *iname, BSTR *fname)
+{
     int i = 0, j = 0;
     HRESULT hres;
 
@@ -1121,7 +1161,8 @@
 }
 
 static DWORD
-xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */) {
+xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */)
+{
     DWORD		*args = ((DWORD*)&tpinfo)+1, *xargs;
     FUNCDESC		*fdesc;
     HRESULT		hres;
@@ -1133,22 +1174,24 @@
     BSTR		names[10];
     int			nrofnames;
 
+    EnterCriticalSection(&tpinfo->crit);
+
     hres = _get_funcdesc(tpinfo->tinfo,method,&fdesc,&iname,&fname);
     if (hres) {
 	ERR("Did not find typeinfo/funcdesc entry for method %d!\n",method);
-	return 0;
+        LeaveCriticalSection(&tpinfo->crit);
+	return E_FAIL;
     }
 
-    /*dump_FUNCDESC(fdesc);*/
     if (relaydeb) {
-	TRACE_(olerelay)("->");
+       TRACE_(olerelay)("->");
 	if (iname)
-	    MESSAGE("%s:",debugstr_w(iname));
+	    TRACE_(olerelay)("%s:",relaystr(iname));
 	if (fname)
-	    MESSAGE("%s(%d)",debugstr_w(fname),method);
+	    TRACE_(olerelay)("%s(%d)",relaystr(fname),method);
 	else
-	    MESSAGE("%d",method);
-	MESSAGE("(");
+	    TRACE_(olerelay)("%d",method);
+	TRACE_(olerelay)("(");
 	if (iname) SysFreeString(iname);
 	if (fname) SysFreeString(fname);
     }
@@ -1163,21 +1206,21 @@
     buf.iid = IID_IUnknown;
     if (method == 0) {
 	xbuf_add(&buf,(LPBYTE)args[0],sizeof(IID));
-	if (relaydeb) MESSAGE("riid=%s,[out]",debugstr_guid((REFIID)args[0]));
+	if (relaydeb) TRACE_(olerelay)("riid=%s,[out]",debugstr_guid((REFIID)args[0]));
     } else {
 	xargs = args;
 	for (i=0;i<fdesc->cParams;i++) {
 	    ELEMDESC	*elem = fdesc->lprgelemdescParam+i;
 	    BOOL	isserialized = FALSE;
 	    if (relaydeb) {
-		if (i) MESSAGE(",");
+		if (i) TRACE_(olerelay)(",");
 		if (i+1<nrofnames && names[i+1])
-		    MESSAGE("%s=",debugstr_w(names[i+1]));
+		    TRACE_(olerelay)("%s=",relaystr(names[i+1]));
 	    }
 	    /* No need to marshal other data than FIN */
 	    if (!(elem->u.paramdesc.wParamFlags & PARAMFLAG_FIN)) {
 		xargs+=_argsize(elem->tdesc.vt);
-		if (relaydeb) MESSAGE("[out]");
+		if (relaydeb) TRACE_(olerelay)("[out]");
 		continue;
 	    }
 	    if (((i+1)<nrofnames) && !IsBadStringPtrW(names[i+1],1)) {
@@ -1231,24 +1274,26 @@
 	    xargs+=_argsize(elem->tdesc.vt);
 	}
     }
-    if (relaydeb) MESSAGE(")");
+    if (relaydeb) TRACE_(olerelay)(")");
     memset(&msg,0,sizeof(msg));
     msg.cbBuffer = buf.curoff;
     msg.iMethod  = method;
     hres = IRpcChannelBuffer_GetBuffer(tpinfo->chanbuf,&msg,&(tpinfo->iid));
     if (hres) {
 	FIXME("RpcChannelBuffer GetBuffer failed, %lx\n",hres);
+        LeaveCriticalSection(&tpinfo->crit);
 	return hres;
     }
     memcpy(msg.Buffer,buf.base,buf.curoff);
-    if (relaydeb) MESSAGE("\n");
+    if (relaydeb) TRACE_(olerelay)("\n");
     hres = IRpcChannelBuffer_SendReceive(tpinfo->chanbuf,&msg,&status);
     if (hres) {
 	FIXME("RpcChannelBuffer SendReceive failed, %lx\n",hres);
+        LeaveCriticalSection(&tpinfo->crit);
 	return hres;
     }
-    relaydeb = TRACE_ON(olerelay);
-    if (relaydeb) MESSAGE(" = %08lx (",status);
+
+    if (relaydeb) TRACE_(olerelay)(" = %08lx (",status);
     if (buf.base)
 	buf.base = HeapReAlloc(GetProcessHeap(),0,buf.base,msg.cbBuffer);
     else
@@ -1258,7 +1303,7 @@
     buf.curoff = 0;
     if (method == 0) {
 	_unmarshal_interface(&buf,(REFIID)args[0],(LPUNKNOWN*)args[1]);
-	if (relaydeb) MESSAGE("[in],%p",*((DWORD**)args[1]));
+	if (relaydeb) TRACE_(olerelay)("[in],%p",*((DWORD**)args[1]));
     } else {
 	xargs = args;
 	for (i=0;i<fdesc->cParams;i++) {
@@ -1266,13 +1311,13 @@
 	    BOOL	isdeserialized = FALSE;
 
 	    if (relaydeb) {
-		if (i) MESSAGE(",");
-		if (i+1<nrofnames && names[i+1]) MESSAGE("%s=",debugstr_w(names[i+1]));
+		if (i) TRACE_(olerelay)(",");
+		if (i+1<nrofnames && names[i+1]) TRACE_(olerelay)("%s=",relaystr(names[i+1]));
 	    }
 	    /* No need to marshal other data than FOUT I think */
 	    if (!(elem->u.paramdesc.wParamFlags & PARAMFLAG_FOUT)) {
 		xargs += _argsize(elem->tdesc.vt);
-		if (relaydeb) MESSAGE("[in]");
+		if (relaydeb) TRACE_(olerelay)("[in]");
 		continue;
 	    }
 	    if (((i+1)<nrofnames) && !IsBadStringPtrW(names[i+1],1)) {
@@ -1329,16 +1374,19 @@
 	    xargs += _argsize(elem->tdesc.vt);
 	}
     }
-    if (relaydeb) MESSAGE(")\n\n");
+    if (relaydeb) TRACE_(olerelay)(")\n");
     HeapFree(GetProcessHeap(),0,buf.base);
+
+    LeaveCriticalSection(&tpinfo->crit);
+
     return status;
 }
 
 static HRESULT WINAPI
 PSFacBuf_CreateProxy(
     LPPSFACTORYBUFFER iface, IUnknown* pUnkOuter, REFIID riid,
-    IRpcProxyBuffer **ppProxy, LPVOID *ppv
-) {
+    IRpcProxyBuffer **ppProxy, LPVOID *ppv)
+{
     HRESULT	hres;
     ITypeInfo	*tinfo;
     int		i, nroffuncs;
@@ -1352,12 +1400,20 @@
 	return hres;
     }
     nroffuncs = _nroffuncs(tinfo);
-    proxy = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TMProxyImpl));
+    proxy = CoTaskMemAlloc(sizeof(TMProxyImpl));
     if (!proxy) return E_OUTOFMEMORY;
-    proxy->asmstubs=HeapAlloc(GetProcessHeap(),0,sizeof(TMAsmProxy)*nroffuncs);
 
     assert(sizeof(TMAsmProxy) == 12);
 
+    proxy->asmstubs = VirtualAlloc(NULL, sizeof(TMAsmProxy) * nroffuncs, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+    if (!proxy->asmstubs) {
+        ERR("Could not commit pages for proxy thunks\n");
+        CoTaskMemFree(proxy);
+        return E_OUTOFMEMORY;
+    }
+
+    InitializeCriticalSection(&proxy->crit);
+
     proxy->lpvtbl = HeapAlloc(GetProcessHeap(),0,sizeof(LPBYTE)*nroffuncs);
     for (i=0;i<nroffuncs;i++) {
 	int		nrofargs;
@@ -1406,9 +1462,10 @@
 	xasm->xcall     -= (DWORD)&(xasm->lret);
 	xasm->lret	= 0xc2;
 	xasm->bytestopop= (nrofargs+2)*4; /* pop args, This, iMethod */
-	proxy->lpvtbl[i] = (DWORD)xasm;
+	proxy->lpvtbl[i] = xasm;
     }
     proxy->lpvtbl2	= &tmproxyvtable;
+    /* 1 reference for the proxy and 1 for the object */
     proxy->ref		= 2;
     proxy->tinfo	= tinfo;
     memcpy(&proxy->iid,riid,sizeof(*riid));
@@ -1418,8 +1475,8 @@
 }
 
 typedef struct _TMStubImpl {
-    ICOM_VTABLE(IRpcStubBuffer)	*lpvtbl;
-    DWORD			ref;
+    IRpcStubBufferVtbl	*lpvtbl;
+    ULONG			ref;
 
     LPUNKNOWN			pUnk;
     ITypeInfo			*tinfo;
@@ -1427,7 +1484,8 @@
 } TMStubImpl;
 
 static HRESULT WINAPI
-TMStubImpl_QueryInterface(LPRPCSTUBBUFFER iface, REFIID riid, LPVOID *ppv) {
+TMStubImpl_QueryInterface(LPRPCSTUBBUFFER iface, REFIID riid, LPVOID *ppv)
+{
     if (IsEqualIID(riid,&IID_IRpcStubBuffer)||IsEqualIID(riid,&IID_IUnknown)){
 	*ppv = (LPVOID)iface;
 	IRpcStubBuffer_AddRef(iface);
@@ -1438,27 +1496,38 @@
 }
 
 static ULONG WINAPI
-TMStubImpl_AddRef(LPRPCSTUBBUFFER iface) {
-    ICOM_THIS(TMStubImpl,iface);
+TMStubImpl_AddRef(LPRPCSTUBBUFFER iface)
+{
+    TMStubImpl *This = (TMStubImpl *)iface;
+        
+    TRACE("(%p) before %lu\n", This, This->ref);
 
-    This->ref++;
-    return This->ref;
+    return InterlockedIncrement(&This->ref);
 }
 
 static ULONG WINAPI
-TMStubImpl_Release(LPRPCSTUBBUFFER iface) {
-    ICOM_THIS(TMStubImpl,iface);
+TMStubImpl_Release(LPRPCSTUBBUFFER iface)
+{
+    ULONG refs;
+    TMStubImpl *This = (TMStubImpl *)iface;
 
-    This->ref--;
-    if (This->ref)
-	return This->ref;
-    HeapFree(GetProcessHeap(),0,This);
-    return 0;
+    TRACE("(%p) after %lu\n", This, This->ref-1);
+
+    refs = InterlockedDecrement(&This->ref);
+    if (!refs)
+    {
+        IRpcStubBuffer_Disconnect(iface);
+        CoTaskMemFree(This);
+    }
+    return refs;
 }
 
 static HRESULT WINAPI
-TMStubImpl_Connect(LPRPCSTUBBUFFER iface, LPUNKNOWN pUnkServer) {
-    ICOM_THIS(TMStubImpl,iface);
+TMStubImpl_Connect(LPRPCSTUBBUFFER iface, LPUNKNOWN pUnkServer)
+{
+    TMStubImpl *This = (TMStubImpl *)iface;
+
+    TRACE("(%p)->(%p)\n", This, pUnkServer);
 
     IUnknown_AddRef(pUnkServer);
     This->pUnk = pUnkServer;
@@ -1466,8 +1535,11 @@
 }
 
 static void WINAPI
-TMStubImpl_Disconnect(LPRPCSTUBBUFFER iface) {
-    ICOM_THIS(TMStubImpl,iface);
+TMStubImpl_Disconnect(LPRPCSTUBBUFFER iface)
+{
+    TMStubImpl *This = (TMStubImpl *)iface;
+
+    TRACE("(%p)->()\n", This);
 
     IUnknown_Release(This->pUnk);
     This->pUnk = NULL;
@@ -1476,11 +1548,11 @@
 
 static HRESULT WINAPI
 TMStubImpl_Invoke(
-    LPRPCSTUBBUFFER iface, RPCOLEMESSAGE* xmsg,IRpcChannelBuffer*rpcchanbuf
-) {
+    LPRPCSTUBBUFFER iface, RPCOLEMESSAGE* xmsg,IRpcChannelBuffer*rpcchanbuf)
+{
     int		i;
     FUNCDESC	*fdesc;
-    ICOM_THIS(TMStubImpl,iface);
+    TMStubImpl *This = (TMStubImpl *)iface;
     HRESULT	hres;
     DWORD	*args, res, *xargs, nrofargs;
     marshal_state	buf;
@@ -1579,7 +1651,7 @@
 	    );
 	xargs += _argsize(elem->tdesc.vt);
 	if (hres) {
-	    FIXME("Failed to deserialize param %s, hres %lx\n",debugstr_w(names[i+1]),hres);
+	    FIXME("Failed to deserialize param %s, hres %lx\n",relaystr(names[i+1]),hres);
 	    break;
 	}
     }
@@ -1665,7 +1737,7 @@
 
 static ULONG WINAPI
 TMStubImpl_CountRefs(LPRPCSTUBBUFFER iface) {
-    ICOM_THIS(TMStubImpl,iface);
+    TMStubImpl *This = (TMStubImpl *)iface;
 
     return This->ref; /*FIXME? */
 }
@@ -1680,8 +1752,7 @@
     return;
 }
 
-ICOM_VTABLE(IRpcStubBuffer) tmstubvtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+IRpcStubBufferVtbl tmstubvtbl = {
     TMStubImpl_QueryInterface,
     TMStubImpl_AddRef,
     TMStubImpl_Release,
@@ -1709,7 +1780,7 @@
 	FIXME("No typeinfo for %s?\n",debugstr_guid(riid));
 	return hres;
     }
-    stub = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TMStubImpl));
+    stub = CoTaskMemAlloc(sizeof(TMStubImpl));
     if (!stub)
 	return E_OUTOFMEMORY;
     stub->lpvtbl	= &tmstubvtbl;
@@ -1718,13 +1789,13 @@
     memcpy(&(stub->iid),riid,sizeof(*riid));
     hres = IRpcStubBuffer_Connect((LPRPCSTUBBUFFER)stub,pUnkServer);
     *ppStub 		= (LPRPCSTUBBUFFER)stub;
+    TRACE("IRpcStubBuffer: %p\n", stub);
     if (hres)
 	FIXME("Connect to pUnkServer failed?\n");
     return hres;
 }
 
-static ICOM_VTABLE(IPSFactoryBuffer) psfacbufvtbl = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+static IPSFactoryBufferVtbl psfacbufvtbl = {
     PSFacBuf_QueryInterface,
     PSFacBuf_AddRef,
     PSFacBuf_Release,
@@ -1733,7 +1804,7 @@
 };
 
 /* This is the whole PSFactoryBuffer object, just the vtableptr */
-static ICOM_VTABLE(IPSFactoryBuffer) *lppsfac = &psfacbufvtbl;
+static IPSFactoryBufferVtbl *lppsfac = &psfacbufvtbl;
 
 /***********************************************************************
  *           DllGetClassObject [OLE32.63]

reactos/lib/oleaut32
typelib.c 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- typelib.c	29 Feb 2004 15:27:51 -0000	1.2
+++ typelib.c	1 Dec 2004 20:06:15 -0000	1.3
@@ -308,7 +308,7 @@
 		return TYPE_E_CANTLOADLIBRARY;
 	} else {
 	    WCHAR tstpath[260];
-	    WCHAR stdole32tlb[] = { 's','t','d','o','l','e','3','2','.','t','l','b',0 };
+	    static const WCHAR stdole32tlb[] = { 's','t','d','o','l','e','3','2','.','t','l','b',0 };
 	    int i;
 
 	    lstrcpyW(tstpath,szFile);
@@ -321,7 +321,6 @@
 		    	MESSAGE("You must copy a 'stdole32.tlb' file to your Windows\\System directory!\n");
 		    	MESSAGE("You can get one from a Windows installation, or look for the DCOM95 package\n");
 		    	MESSAGE("on the Microsoft Download Pages.\n");
-		    	MESSAGE("A free download link is on http://sourceforge.net/projects/wine/, look for dcom95.exe.\n");
 		    	MESSAGE("**************************************************************************\n");
 			break;
 		    }
@@ -854,8 +853,8 @@
 /* internal ITypeLib data */
 typedef struct tagITypeLibImpl
 {
-    ICOM_VFIELD(ITypeLib2);
-    ICOM_VTABLE(ITypeComp) * lpVtblTypeComp;
+    ITypeLib2Vtbl *lpVtbl;
+    ITypeCompVtbl *lpVtblTypeComp;
     UINT ref;
     TLIBATTR LibAttr;            /* guid,lcid,syskind,version,flags */
 
@@ -881,8 +880,8 @@
     WCHAR *path;
 } ITypeLibImpl;
 
-static struct ICOM_VTABLE(ITypeLib2) tlbvt;
-static struct ICOM_VTABLE(ITypeComp) tlbtcvt;
+static struct ITypeLib2Vtbl tlbvt;
+static struct ITypeCompVtbl tlbtcvt;
 
 #define _ITypeComp_Offset(impl) ((int)(&(((impl*)0)->lpVtblTypeComp)))
 #define ICOM_THIS_From_ITypeComp(impl, iface) impl* This = (impl*)(((char*)iface)-_ITypeComp_Offset(impl))
@@ -965,8 +964,8 @@
 /* internal TypeInfo data */
 typedef struct tagITypeInfoImpl
 {
-    ICOM_VFIELD(ITypeInfo2);
-    ICOM_VTABLE(ITypeComp) * lpVtblTypeComp;
+    ITypeInfo2Vtbl *lpVtbl;
+    ITypeCompVtbl  *lpVtblTypeComp;
     UINT ref;
     TYPEATTR TypeAttr ;         /* _lots_ of type information. */
     ITypeLibImpl * pTypeLib;        /* back pointer to typelib */
@@ -994,8 +993,8 @@
     struct tagITypeInfoImpl * next;
 } ITypeInfoImpl;
 
-static struct ICOM_VTABLE(ITypeInfo2) tinfvt;
-static struct ICOM_VTABLE(ITypeComp)  tcompvt;
+static struct ITypeInfo2Vtbl tinfvt;
+static struct ITypeCompVtbl  tcompvt;
 
 static ITypeInfo2 * WINAPI ITypeInfo_Constructor();
 
@@ -1044,6 +1043,7 @@
     case VT_UINT: sprintf(szVarType, "VT_UINT"); break;
     case VT_VARIANT: sprintf(szVarType, "VT_VARIANT"); break;
     case VT_VOID: sprintf(szVarType, "VT_VOID"); break;
+    case VT_HRESULT: sprintf(szVarType, "VT_HRESULT"); break;
     case VT_USERDEFINED: sprintf(szVarType, "VT_USERDEFINED ref = %lx",
 				 pTD->u.hreftype); break;
     case VT_PTR: sprintf(szVarType, "ptr to ");
@@ -1102,6 +1102,9 @@
   MESSAGE(")\n\toVft: %d\n", funcdesc->oVft);
   MESSAGE("\tcParamsOpt: %d\n", funcdesc->cParamsOpt);
   MESSAGE("\twFlags: %x\n", funcdesc->wFuncFlags);
+
+  MESSAGE("\telemdescFunc (return value type):\n");
+  dump_ELEMDESC(&funcdesc->elemdescFunc);
 }
 
 void dump_IDLDESC(IDLDESC *idl) {
@@ -1512,7 +1515,7 @@
         case VT_BSTR    :{
             char * ptr;
             MSFT_ReadLEDWords(&size, sizeof(INT), pcx, DO_NOT_SEEK );
-	    if(size <= 0) {
+	    if(size < 0) {
 	        FIXME("BSTR length = %d?\n", size);
 	    } else {
                 ptr=TLB_Alloc(size);/* allocate temp buffer */
@@ -2457,7 +2460,6 @@
         {
             *ppTI = MSFT_DoTypeInfo(&cx, i, pTypeLibImpl);
 
-            ITypeInfo_AddRef((ITypeInfo*) *ppTI);
             ppTI = &((*ppTI)->next);
             (pTypeLibImpl->TypeInfoCount)++;
         }
@@ -3369,7 +3371,7 @@
 	REFIID riid,
 	VOID **ppvObject)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
 
     TRACE("(%p)->(IID: %s)\n",This,debugstr_guid(riid));
 
@@ -3395,7 +3397,7 @@
  */
 static ULONG WINAPI ITypeLib2_fnAddRef( ITypeLib2 *iface)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
 
     TRACE("(%p)->ref was %u\n",This, This->ref);
 
@@ -3406,7 +3408,7 @@
  */
 static ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
 
     --(This->ref);
 
@@ -3464,7 +3466,7 @@
  */
 static UINT WINAPI ITypeLib2_fnGetTypeInfoCount( ITypeLib2 *iface)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     TRACE("(%p)->count is %d\n",This, This->TypeInfoCount);
     return This->TypeInfoCount;
 }
@@ -3480,7 +3482,7 @@
 {
     int i;
 
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     ITypeInfoImpl *pTypeInfo = This->pTypeInfo;
 
     TRACE("(%p)->(index=%d) \n", This, index);
@@ -3515,7 +3517,7 @@
     UINT index,
     TYPEKIND *pTKind)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     int i;
     ITypeInfoImpl *pTInfo = This->pTypeInfo;
 
@@ -3549,7 +3551,7 @@
     REFGUID guid,
     ITypeInfo **ppTInfo)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     ITypeInfoImpl *pTypeInfo = This->pTypeInfo; /* head of list */
 
     TRACE("(%p)\n\tguid:\t%s)\n",This,debugstr_guid(guid));
@@ -3587,7 +3589,7 @@
 	ITypeLib2 *iface,
 	LPTLIBATTR *ppTLibAttr)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     TRACE("(%p)\n",This);
     *ppTLibAttr = HeapAlloc(GetProcessHeap(), 0, sizeof(**ppTLibAttr));
     memcpy(*ppTLibAttr, &This->LibAttr, sizeof(**ppTLibAttr));
@@ -3604,7 +3606,7 @@
 	ITypeLib2 *iface,
 	ITypeComp **ppTComp)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
 
     TRACE("(%p)->(%p)\n",This,ppTComp);
     *ppTComp = (ITypeComp *)&This->lpVtblTypeComp;
@@ -3630,7 +3632,7 @@
     DWORD *pdwHelpContext,
     BSTR *pBstrHelpFile)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
 
     HRESULT result = E_INVALIDARG;
 
@@ -3712,7 +3714,7 @@
 	ULONG lHashVal,
 	BOOL *pfName)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     ITypeInfoImpl *pTInfo;
     TLBFuncDesc *pFInfo;
     TLBVarDesc *pVInfo;
@@ -3758,7 +3760,7 @@
 	MEMBERID *rgMemId,
 	UINT16 *pcFound)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     ITypeInfoImpl *pTInfo;
     TLBFuncDesc *pFInfo;
     TLBVarDesc *pVInfo;
@@ -3799,7 +3801,7 @@
 	ITypeLib2 *iface,
 	TLIBATTR *pTLibAttr)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     TRACE("freeing (%p)\n",This);
     HeapFree(GetProcessHeap(),0,pTLibAttr);
 
@@ -3814,7 +3816,7 @@
 	REFGUID guid,
         VARIANT *pVarVal)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     TLBCustData *pCData;
 
     for(pCData=This->pCustData; pCData; pCData = pCData->next)
@@ -3844,7 +3846,7 @@
         ULONG *pcUniqueNames,
 	ULONG *pcchUniqueNames)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
 
     FIXME("(%p): stub!\n", This);
 
@@ -3868,7 +3870,7 @@
         DWORD *pdwHelpStringContext,
 	BSTR *pbstrHelpStringDll)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     HRESULT result;
     ITypeInfo *pTInfo;
 
@@ -3929,7 +3931,7 @@
 	ITypeLib2 * iface,
         CUSTDATA *pCustData)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
     TLBCustData *pCData;
     int i;
     TRACE("(%p) returning %d items\n", This, This->ctCustData);
@@ -3947,8 +3949,7 @@
     return S_OK;
 }
 
-static ICOM_VTABLE(ITypeLib2) tlbvt = {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+static ITypeLib2Vtbl tlbvt = {
     ITypeLib2_fnQueryInterface,
     ITypeLib2_fnAddRef,
     ITypeLib2_fnRelease,
@@ -4015,9 +4016,8 @@
     return E_NOTIMPL;
 }
 
-static ICOM_VTABLE(ITypeComp) tlbtcvt =
+static ITypeCompVtbl tlbtcvt =
 {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 
     ITypeLibComp_fnQueryInterface,
     ITypeLibComp_fnAddRef,
@@ -4050,7 +4050,7 @@
 	REFIID riid,
 	VOID **ppvObject)
 {
-    ICOM_THIS( ITypeLibImpl, iface);
+    ITypeLibImpl *This = (ITypeLibImpl *)iface;
 
     TRACE("(%p)->(IID: %s)\n",This,debugstr_guid(riid));
 
@@ -4073,9 +4073,10 @@
  */
 static ULONG WINAPI ITypeInfo_fnAddRef( ITypeInfo2 *iface)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
 
     ++(This->ref);
+    ITypeLib2_AddRef((ITypeLib2*)This->pTypeLib);
 
     TRACE("(%p)->ref is %u\n",This, This->ref);
     return This->ref;
@@ -4083,16 +4084,19 @@
 
 /* ITypeInfo::Release
  */
-static ULONG WINAPI ITypeInfo_fnRelease( ITypeInfo2 *iface)
+static ULONG WINAPI ITypeInfo_fnRelease(ITypeInfo2 *iface)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
 
     --(This->ref);
 
     TRACE("(%p)->(%u)\n",This, This->ref);
 
-    if (!This->ref)
-    {
+    if (This->ref)   {
+      /* We don't release ITypeLib when ref=0 becouse
+         it means that funtion is called by ITypeLi2_Release */
+      ITypeLib2_Release((ITypeLib2*)This->pTypeLib);
+    } else   {
       FIXME("destroy child objects\n");
 
       TRACE("destroying ITypeInfo(%p)\n",This);
@@ -4128,7 +4132,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetTypeAttr( ITypeInfo2 *iface,
         LPTYPEATTR  *ppTypeAttr)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TRACE("(%p)\n",This);
     /* FIXME: must do a copy here */
     *ppTypeAttr=&This->TypeAttr;
@@ -4144,7 +4148,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetTypeComp( ITypeInfo2 *iface,
         ITypeComp  * *ppTComp)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
 
     TRACE("(%p)->(%p) stub!\n", This, ppTComp);
 
@@ -4162,7 +4166,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetFuncDesc( ITypeInfo2 *iface, UINT index,
         LPFUNCDESC  *ppFuncDesc)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     int i;
     TLBFuncDesc * pFDesc;
     TRACE("(%p) index %d\n", This, index);
@@ -4184,7 +4188,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetVarDesc( ITypeInfo2 *iface, UINT index,
         LPVARDESC  *ppVarDesc)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     int i;
     TLBVarDesc * pVDesc;
     TRACE("(%p) index %d\n", This, index);
@@ -4207,7 +4211,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetNames( ITypeInfo2 *iface, MEMBERID memid,
         BSTR  *rgBstrNames, UINT cMaxNames, UINT  *pcNames)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBFuncDesc * pFDesc;
     TLBVarDesc * pVDesc;
     int i;
@@ -4275,7 +4279,7 @@
         UINT index,
 	HREFTYPE  *pRefType)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     int(i);
     TLBImplType *pImpl = This->impltypelist;
 
@@ -4327,7 +4331,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetImplTypeFlags( ITypeInfo2 *iface,
         UINT index, INT  *pImplTypeFlags)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     int i;
     TLBImplType *pImpl;
 
@@ -4350,7 +4354,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetIDsOfNames( ITypeInfo2 *iface,
         LPOLESTR  *rgszNames, UINT cNames, MEMBERID  *pMemId)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBFuncDesc * pFDesc;
     TLBVarDesc * pVDesc;
     HRESULT ret=S_OK;
@@ -4468,7 +4472,7 @@
     return res;
 }
 
-extern int const _argsize(DWORD vt);
+extern int _argsize(DWORD vt);
 
 /****************************************************************************
  * Helper functions for Dispcall / Invoke, which copies one variant
@@ -4507,7 +4511,8 @@
 	return S_OK;
     }
     if (vt==VT_UNKNOWN && V_VT(arg)==VT_DISPATCH) {
-    	/* in this context, if the type lib specifies IUnknown*, giving an IDispatch* is correct; so, don't invoke VariantChangeType */
+    	/* in this context, if the type lib specifies IUnknown*, giving an
+           IDispatch* is correct; so, don't invoke VariantChangeType */
     	memcpy(argpos,&V_UNION(arg,lVal), arglen);
 	return S_OK;
     }
@@ -4515,82 +4520,110 @@
 	return _copy_arg(tinfo, tdesc->u.lptdesc, argpos, arg, tdesc->u.lptdesc->vt);
 
     if ((vt == VT_USERDEFINED) && tdesc && tinfo) {
-	ITypeInfo	*tinfo2;
-	TYPEATTR	*tattr;
+	ITypeInfo	*tinfo2 = NULL;
+	TYPEATTR	*tattr = NULL;
 	HRESULT		hres;
 
 	hres = ITypeInfo_GetRefTypeInfo(tinfo,tdesc->u.hreftype,&tinfo2);
 	if (hres) {
-	    FIXME("Could not get typeinfo of hreftype %lx for VT_USERDEFINED, while coercing from vt 0x%x. Copying 4 byte.\n",tdesc->u.hreftype,V_VT(arg));
+	    FIXME("Could not get typeinfo of hreftype %lx for VT_USERDEFINED, "
+                  "while coercing from vt 0x%x. Copying 4 byte.\n",
+                  tdesc->u.hreftype,V_VT(arg));
 	    memcpy(argpos, &V_UNION(arg,lVal), 4);
 	    return S_OK;
 	}
-	ITypeInfo_GetTypeAttr(tinfo2,&tattr);
+	hres = ITypeInfo_GetTypeAttr(tinfo2,&tattr);
+        if( hres )
+        {
+            ERR("GetTypeAttr failed\n");
+	    ITypeInfo_Release(tinfo2);
+            return hres;
+        }
 	switch (tattr->typekind) {
 	case TKIND_ENUM:
           switch ( V_VT( arg ) ) {
           case VT_I2:
              *argpos = V_UNION(arg,iVal);
-             return S_OK;
+             hres = S_OK;
+             break;
           case VT_I4:
              memcpy(argpos, &V_UNION(arg,lVal), 4);
-             return S_OK;
+             hres = S_OK;
+             break;
           default:
              FIXME("vt 0x%x -> TKIND_ENUM unhandled.\n",V_VT(arg));
+             hres = E_FAIL;
              break;
           }
+          break;
 
 	case TKIND_ALIAS:
 	    tdesc = &(tattr->tdescAlias);
 	    hres = _copy_arg((ITypeInfo2*)tinfo2, tdesc, argpos, arg, tdesc->vt);
-	    ITypeInfo_Release(tinfo2);
-	    return hres;
+	    break;
 
 	case TKIND_INTERFACE:
 	    if (V_VT(arg) == VT_DISPATCH) {
 		IDispatch *disp;
 		if (IsEqualIID(&IID_IDispatch,&(tattr->guid))) {
 		    memcpy(argpos, &V_UNION(arg,pdispVal), 4);
-		    return S_OK;
+		    hres = S_OK;
+                    break;
 		}
-		hres=IUnknown_QueryInterface(V_UNION(arg,pdispVal),&IID_IDispatch,(LPVOID*)&disp);
+		hres=IUnknown_QueryInterface(V_UNION(arg,pdispVal),
+                                             &IID_IDispatch,(LPVOID*)&disp);
 		if (SUCCEEDED(hres)) {
 		    memcpy(argpos,&disp,4);
 		    IUnknown_Release(V_UNION(arg,pdispVal));
-		    return S_OK;
+		    hres = S_OK;
+                    break;
 		}
-		FIXME("Failed to query IDispatch interface from %s while converting to VT_DISPATCH!\n",debugstr_guid(&(tattr->guid)));
-		return E_FAIL;
+		FIXME("Failed to query IDispatch interface from %s while "
+                     "converting to VT_DISPATCH!\n",debugstr_guid(&(tattr->guid)));
+		hres = E_FAIL;
+                break;
 	    }
 	    if (V_VT(arg) == VT_UNKNOWN) {
 		memcpy(argpos, &V_UNION(arg,punkVal), 4);
-		return S_OK;
+		hres = S_OK;
+                break;
 	    }
-	    FIXME("vt 0x%x -> TKIND_INTERFACE(%s) unhandled\n",V_VT(arg),debugstr_guid(&(tattr->guid)));
+	    FIXME("vt 0x%x -> TKIND_INTERFACE(%s) unhandled\n",
+                  V_VT(arg),debugstr_guid(&(tattr->guid)));
+            hres = E_FAIL;
 	    break;
+
 	case TKIND_DISPATCH:
 	    if (V_VT(arg) == VT_DISPATCH) {
 		memcpy(argpos, &V_UNION(arg,pdispVal), 4);
-		return S_OK;
+		hres = S_OK;
 	    }
-	    FIXME("TKIND_DISPATCH unhandled for target vt 0x%x.\n",V_VT(arg));
+            else {
+                hres = E_FAIL;
+	        FIXME("TKIND_DISPATCH unhandled for target vt 0x%x.\n",V_VT(arg));
+            }
 	    break;
 	case TKIND_RECORD:
 	    FIXME("TKIND_RECORD unhandled.\n");
+            hres = E_FAIL;
 	    break;
 	default:
 	    FIXME("TKIND %d unhandled.\n",tattr->typekind);
+            hres = E_FAIL;
 	    break;
 	}
-	return E_FAIL;
+	ITypeInfo_ReleaseTypeAttr(tinfo2, tattr);
+	ITypeInfo_Release(tinfo2);
+	return hres;
     }
 
     oldvt = V_VT(arg);
     VariantInit(&va);
     if (VariantChangeType(&va,arg,0,vt)==S_OK) {
 	memcpy(argpos,&V_UNION(&va,lVal), arglen);
-	FIXME("Should not use VariantChangeType here. (conversion from 0x%x -> 0x%x)\n",
-		V_VT(arg), vt
+	FIXME("Should not use VariantChangeType here."
+              " (conversion from 0x%x -> 0x%x) %08lx\n",
+		V_VT(arg), vt, *argpos
 	);
 	return S_OK;
     }
@@ -4656,7 +4689,7 @@
     EXCEPINFO  *pExcepInfo,
     UINT  *pArgErr)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBFuncDesc * pFDesc;
     TLBVarDesc * pVDesc;
     int i;
@@ -4682,7 +4715,8 @@
 	    DWORD res;
 	    int   numargs, numargs2, argspos, args2pos;
 	    DWORD *args , *args2;
-
+            VARIANT *rgvarg = HeapAlloc(GetProcessHeap(),0,sizeof(VARIANT)*pFDesc->funcdesc.cParams);
+            memcpy(rgvarg,pDispParams->rgvarg,sizeof(VARIANT)*pDispParams->cArgs);
 
 	    numargs = 1; numargs2 = 0;
 	    for (i=0;i<pFDesc->funcdesc.cParams;i++) {
@@ -4702,11 +4736,40 @@
 	    for (i=0;i<pFDesc->funcdesc.cParams;i++) {
 		int arglen = _argsize(pFDesc->funcdesc.lprgelemdescParam[i].tdesc.vt);
 		if (i<pDispParams->cArgs) {
-		    VARIANT *arg = &pDispParams->rgvarg[pDispParams->cArgs-i-1];
-		    TYPEDESC *tdesc = &pFDesc->funcdesc.lprgelemdescParam[i].tdesc;
-		    hres = _copy_arg(iface, tdesc, &args[argspos], arg, tdesc->vt);
-		    if (FAILED(hres)) return hres;
-		    argspos += arglen;
+                    VARIANT *arg = &rgvarg[pDispParams->cArgs-i-1];
+                    TYPEDESC *tdesc = &pFDesc->funcdesc.lprgelemdescParam[i].tdesc;
+                    USHORT paramFlags = pFDesc->funcdesc.lprgelemdescParam[i].u.paramdesc.wParamFlags;
+                    if (paramFlags & PARAMFLAG_FOPT) {
+                        if(i < pFDesc->funcdesc.cParams-pFDesc->funcdesc.cParamsOpt)
+                            ERR("Parameter has PARAMFLAG_FOPT flag but is not one of last cParamOpt parameters\n");
+                        if(V_VT(arg) == VT_EMPTY
+                          || ((V_VT(arg) & VT_BYREF) && !V_BYREF(arg))) {
+                               /* FIXME: Documentation says that we do this when parameter is left unspecified.
+                                         How to determine it? */
+
+                            if(paramFlags & PARAMFLAG_FHASDEFAULT)
+                                FIXME("PARAMFLAG_FHASDEFAULT flag not supported\n");
+                            V_VT(arg) = VT_ERROR;
+                            V_ERROR(arg) = DISP_E_PARAMNOTFOUND;
+                            arglen = _argsize(VT_ERROR);
+                        }
+                    }
+                    hres = _copy_arg(iface, tdesc, &args[argspos], arg, tdesc->vt);
+                    if (FAILED(hres)) return hres;
+                    argspos += arglen;
+                } else if(pFDesc->funcdesc.lprgelemdescParam[i].u.paramdesc.wParamFlags & PARAMFLAG_FOPT) {
+                    VARIANT *arg = &rgvarg[i];
+                    TYPEDESC *tdesc = &pFDesc->funcdesc.lprgelemdescParam[i].tdesc;
+                    if(i < pFDesc->funcdesc.cParams-pFDesc->funcdesc.cParamsOpt)
+                        ERR("Parameter has PARAMFLAG_FOPT flag but is not one of last cParamOpt parameters\n");
+                    if(pFDesc->funcdesc.lprgelemdescParam[i].u.paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
+                        FIXME("PARAMFLAG_FHASDEFAULT flag not supported\n");
+                    V_VT(arg) = VT_ERROR;
+                    V_ERROR(arg) = DISP_E_PARAMNOTFOUND;
+                    arglen = _argsize(VT_ERROR);
+                    hres = _copy_arg(iface, tdesc, &args[argspos], arg, tdesc->vt);
+                    if (FAILED(hres)) return hres;
+                    argspos += arglen;
 		} else {
 		    TYPEDESC *tdesc = &(pFDesc->funcdesc.lprgelemdescParam[i].tdesc);
 		    if (tdesc->vt != VT_PTR)
@@ -4724,16 +4787,19 @@
 		    args2pos	+= arglen;
 		}
 	    }
-	    if (pFDesc->funcdesc.cParamsOpt)
+	    if (pFDesc->funcdesc.cParamsOpt < 0)
 		FIXME("Does not support optional parameters (%d)\n",
 			pFDesc->funcdesc.cParamsOpt
-		);
+                );
 
 	    res = _invoke((*(FARPROC**)pIUnk)[pFDesc->funcdesc.oVft/4],
 		    pFDesc->funcdesc.callconv,
 		    numargs,
 		    args
 	    );
+
+            HeapFree(GetProcessHeap(), 0, rgvarg);
+
 	    if (pVarResult && (dwFlags & (DISPATCH_PROPERTYGET))) {
 		args2pos = 0;
 		for (i=0;i<pFDesc->funcdesc.cParams-pDispParams->cArgs;i++) {
@@ -4865,7 +4931,7 @@
         MEMBERID memid, BSTR  *pBstrName, BSTR  *pBstrDocString,
         DWORD  *pdwHelpContext, BSTR  *pBstrHelpFile)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBFuncDesc * pFDesc;
     TLBVarDesc * pVDesc;
     TRACE("(%p) memid %ld Name(%p) DocString(%p)"
@@ -4915,7 +4981,7 @@
         INVOKEKIND invKind, BSTR  *pBstrDllName, BSTR  *pBstrName,
         WORD  *pwOrdinal)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBFuncDesc *pFDesc;
 
     FIXME("(%p, memid %lx, %d, %p, %p, %p), partial stub!\n", This, memid, invKind, pBstrDllName, pBstrName, pwOrdinal);
@@ -4927,7 +4993,7 @@
 
 	    /* FIXME: This is wrong, but how do you find that out? */
 	    if (pBstrDllName) {
-		const WCHAR oleaut32W[] = {'O','L','E','A','U','T','3','2','.','D','L','L',0};
+		static const WCHAR oleaut32W[] = {'O','L','E','A','U','T','3','2','.','D','L','L',0};
 		*pBstrDllName = SysAllocString(oleaut32W);
 	    }
 
@@ -4957,7 +5023,7 @@
         HREFTYPE hRefType,
 	ITypeInfo  **ppTInfo)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     HRESULT result = E_FAIL;
 
 
@@ -5052,7 +5118,7 @@
 static HRESULT WINAPI ITypeInfo_fnAddressOfMember( ITypeInfo2 *iface,
         MEMBERID memid, INVOKEKIND invKind, PVOID *ppv)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     FIXME("(%p) stub!\n", This);
     return S_OK;
 }
@@ -5065,7 +5131,7 @@
 static HRESULT WINAPI ITypeInfo_fnCreateInstance( ITypeInfo2 *iface,
         IUnknown *pUnk, REFIID riid, VOID  **ppvObj)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     FIXME("(%p) stub!\n", This);
     return S_OK;
 }
@@ -5077,7 +5143,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetMops( ITypeInfo2 *iface, MEMBERID memid,
 				BSTR  *pBstrMops)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     FIXME("(%p) stub!\n", This);
     return S_OK;
 }
@@ -5090,7 +5156,7 @@
 static HRESULT WINAPI ITypeInfo_fnGetContainingTypeLib( ITypeInfo2 *iface,
         ITypeLib  * *ppTLib, UINT  *pIndex)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     
     /* If a pointer is null, we simply ignore it, the ATL in particular passes pIndex as 0 */
     if (pIndex) {
@@ -5115,7 +5181,7 @@
 static void WINAPI ITypeInfo_fnReleaseTypeAttr( ITypeInfo2 *iface,
         TYPEATTR* pTypeAttr)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TRACE("(%p)->(%p)\n", This, pTypeAttr);
 }
 
@@ -5127,7 +5193,7 @@
 	ITypeInfo2 *iface,
         FUNCDESC *pFuncDesc)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TRACE("(%p)->(%p)\n", This, pFuncDesc);
 }
 
@@ -5138,7 +5204,7 @@
 static void WINAPI ITypeInfo_fnReleaseVarDesc( ITypeInfo2 *iface,
         VARDESC *pVarDesc)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TRACE("(%p)->(%p)\n", This, pVarDesc);
 }
 
@@ -5150,7 +5216,7 @@
 static HRESULT WINAPI ITypeInfo2_fnGetTypeKind( ITypeInfo2 * iface,
     TYPEKIND *pTypeKind)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     *pTypeKind=This->TypeAttr.typekind;
     TRACE("(%p) type 0x%0x\n", This,*pTypeKind);
     return S_OK;
@@ -5165,7 +5231,7 @@
  */
 static HRESULT WINAPI ITypeInfo2_fnGetTypeFlags( ITypeInfo2 *iface, ULONG *pTypeFlags)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     *pTypeFlags=This->TypeAttr.wTypeFlags;
     TRACE("(%p) flags 0x%lx\n", This,*pTypeFlags);
     return S_OK;
@@ -5179,7 +5245,7 @@
 static HRESULT WINAPI ITypeInfo2_fnGetFuncIndexOfMemId( ITypeInfo2 * iface,
     MEMBERID memid, INVOKEKIND invKind, UINT *pFuncIndex)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBFuncDesc *pFuncInfo;
     int i;
     HRESULT result;
@@ -5207,7 +5273,7 @@
 static HRESULT WINAPI ITypeInfo2_fnGetVarIndexOfMemId( ITypeInfo2 * iface,
     MEMBERID memid, UINT *pVarIndex)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBVarDesc *pVarInfo;
     int i;
     HRESULT result;
@@ -5235,7 +5301,7 @@
 	REFGUID guid,
 	VARIANT *pVarVal)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData;
 
     for(pCData=This->pCustData; pCData; pCData = pCData->next)
@@ -5262,7 +5328,7 @@
 	REFGUID guid,
 	VARIANT *pVarVal)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData=NULL;
     TLBFuncDesc * pFDesc;
     int i;
@@ -5294,7 +5360,7 @@
 	REFGUID guid,
 	VARIANT *pVarVal)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData=NULL;
     TLBFuncDesc * pFDesc;
     int i;
@@ -5327,7 +5393,7 @@
 	REFGUID guid,
 	VARIANT *pVarVal)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData=NULL;
     TLBVarDesc * pVDesc;
     int i;
@@ -5363,7 +5429,7 @@
 	REFGUID guid,
 	VARIANT *pVarVal)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData=NULL;
     TLBImplType * pRDesc;
     int i;
@@ -5404,7 +5470,7 @@
 	DWORD *pdwHelpStringContext,
 	BSTR *pbstrHelpStringDll)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBFuncDesc * pFDesc;
     TLBVarDesc * pVDesc;
     TRACE("(%p) memid %ld lcid(0x%lx)  HelpString(%p) "
@@ -5460,7 +5526,7 @@
 	ITypeInfo2 * iface,
 	CUSTDATA *pCustData)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData;
     int i;
 
@@ -5490,7 +5556,7 @@
 	UINT index,
 	CUSTDATA *pCustData)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData;
     TLBFuncDesc * pFDesc;
     int i;
@@ -5526,7 +5592,7 @@
 static HRESULT WINAPI ITypeInfo2_fnGetAllParamCustData( ITypeInfo2 * iface,
     UINT indexFunc, UINT indexParam, CUSTDATA *pCustData)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData=NULL;
     TLBFuncDesc * pFDesc;
     int i;
@@ -5563,7 +5629,7 @@
 static HRESULT WINAPI ITypeInfo2_fnGetAllVarCustData( ITypeInfo2 * iface,
     UINT index, CUSTDATA *pCustData)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData;
     TLBVarDesc * pVDesc;
     int i;
@@ -5601,7 +5667,7 @@
 	UINT index,
 	CUSTDATA *pCustData)
 {
-    ICOM_THIS( ITypeInfoImpl, iface);
+    ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
     TLBCustData *pCData;
     TLBImplType * pRDesc;
     int i;
@@ -5629,9 +5695,8 @@
     return TYPE_E_ELEMENTNOTFOUND;
 }
 
-static ICOM_VTABLE(ITypeInfo2) tinfvt =
+static ITypeInfo2Vtbl tinfvt =
 {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 
     ITypeInfo_fnQueryInterface,
     ITypeInfo_fnAddRef,
@@ -5784,9 +5849,8 @@
     return S_OK;
 }
 
-static ICOM_VTABLE(ITypeComp) tcompvt =
+static ITypeCompVtbl tcompvt =
 {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 
     ITypeComp_fnQueryInterface,
     ITypeComp_fnAddRef,

reactos/lib/oleaut32
typelib.h 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- typelib.h	7 Feb 2004 18:53:58 -0000	1.1
+++ typelib.h	1 Dec 2004 20:06:15 -0000	1.2
@@ -76,9 +76,9 @@
         INT   helpfile;         /* position of helpfile in stringtable */
 /*0x40*/INT   CustomDataOffset; /* if -1 no custom data, else it is offset */
                                 /* in customer data/guid offset table */
-        INT   res44;            /* unknown always: 0x20 */
-        INT   res48;            /* unknown always: 0x80 */
-        INT   dispatchpos;      /* gets a value (1+n*0x0c) with Idispatch interfaces */
+        INT   res44;            /* unknown always: 0x20 (guid hash size?) */
+        INT   res48;            /* unknown always: 0x80 (name hash size?) */
+        INT   dispatchpos;      /* HREFTYPE to IDispatch, or -1 if no IDispatch */
 /*0x50*/INT   res50;            /* is zero becomes one when an interface is derived */
 } MSFT_Header;
 
@@ -172,11 +172,11 @@
     INT   DataType;     /* data type of the memeber, eg return of function */
     INT   Flags;        /* something to do with attribute flags (LOWORD) */
 #ifdef WORDS_BIGENDIAN
-    INT16 res3;         /* some offset into dunno what */
+    INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
     INT16 VtableOffset; /* offset in vtable */
 #else
     INT16 VtableOffset; /* offset in vtable */
-    INT16 res3;         /* some offset into dunno what */
+    INT16 funcdescsize; /* size of reconstituted FUNCDESC and related structs */
 #endif
     INT   FKCCIC;       /* bit string with the following  */
                         /* meaning (bit 0 is the msb): */
@@ -226,11 +226,11 @@
     INT   DataType;     /* data type of the variable */
     INT   Flags;        /* VarFlags (LOWORD) */
 #ifdef WORDS_BIGENDIAN
-    INT16 res3;         /* some offset into dunno what */
+    INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */
     INT16 VarKind;      /* VarKind */
 #else
     INT16 VarKind;      /* VarKind */
-    INT16 res3;         /* some offset into dunno what */
+    INT16 vardescsize;  /* size of reconstituted VARDESC and related structs */
 #endif
     INT   OffsValue;    /* value of the variable or the offset  */
                         /* in the data structure */
@@ -258,17 +258,23 @@
 /* this is how a guid is stored */
 typedef struct {
     GUID guid;
-    INT   unk10;        /* differntiate with libid, classid etc? */
-                        /* it's -2 for a libary */
-                        /* it's 0 for an interface */
-    INT   unk14;        /* always? -1 */
+    INT   hreftype;     /* -2 for the typelib guid, typeinfo offset
+			   for typeinfo guid, low two bits are 01 if
+			   this is an imported typeinfo, low two bits
+			   are 10 if this is an imported typelib (used
+			   by imported typeinfos) */
+    INT   next_hash;    /* offset to next guid in the hash bucket */
 } MSFT_GuidEntry;
 /* some data preceding entries in the name table */
 typedef struct {
-    INT   unk00;        /* sometimes -1 (lib, parameter) ,
-                           sometimes 0 (interface, func) */
-    INT   unk10;        /* sometimes -1 (lib) , sometimes 0 (interface, func),
-                           sometimes 0x10 (par) */
+    INT   hreftype;     /* is -1 if name is for neither a typeinfo,
+			   a variable, or a function (that is, name
+			   is for a typelib or a function parameter).
+			   otherwise is the offset of the first
+			   typeinfo that this name refers to (either
+			   to the typeinfo itself or to a member of
+			   the typeinfo */
+    INT   next_hash;    /* offset to next name in the hash bucket */
     INT   namelen;      /* only lower 8 bits are valid,
 			   lower-middle 8 bits are unknown (flags?),
 			   upper 16 bits are hash code */

reactos/lib/oleaut32
typelib2.c 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- typelib2.c	28 Feb 2004 19:16:54 -0000	1.2
+++ typelib2.c	1 Dec 2004 20:06:15 -0000	1.3
@@ -146,8 +146,8 @@
 
 typedef struct tagICreateTypeLib2Impl
 {
-    ICOM_VFIELD(ICreateTypeLib2);
-    ICOM_VTABLE(ITypeLib2) *lpVtblTypeLib2;
+    ICreateTypeLib2Vtbl *lpVtbl;
+    ITypeLib2Vtbl       *lpVtblTypeLib2;
 
     UINT ref;
 
@@ -172,8 +172,8 @@
 
 typedef struct tagICreateTypeInfo2Impl
 {
-    ICOM_VFIELD(ICreateTypeInfo2);
-    ICOM_VTABLE(ITypeInfo2) *lpVtblTypeInfo2;
+    ICreateTypeInfo2Vtbl *lpVtbl;
+    ITypeInfo2Vtbl       *lpVtblTypeInfo2;
 
     UINT ref;
 
@@ -254,6 +254,58 @@
 }
 
 /****************************************************************************
+ *	ctl2_hash_guid
+ *
+ *  Generates a hash key from a GUID.
+ *
+ * RETURNS
+ *
+ *  The hash key for the GUID.
+ */
+static int ctl2_hash_guid(
+	REFGUID guid)                /* [I] The guid to find. */
+{
+    int hash;
+    int i;
+
+    hash = 0;
+    for (i = 0; i < 8; i ++) {
+	hash ^= ((short *)guid)[i];
+    }
+
+    return (hash & 0xf) | ((hash & 0x10) & (0 - !!(hash & 0xe0)));
+}
+
+/****************************************************************************
+ *	ctl2_find_guid
+ *
+ *  Locates a guid in a type library.
+ *
+ * RETURNS
+ *
+ *  The offset into the GUID segment of the guid, or -1 if not found.
+ */
+static int ctl2_find_guid(
+	ICreateTypeLib2Impl *This, /* [I] The typelib to operate against. */
+	int hash_key,              /* [I] The hash key for the guid. */
+	REFGUID guid)                /* [I] The guid to find. */
+{
+    int offset;
+    MSFT_GuidEntry *guidentry;
+
+    offset = This->typelib_guidhash_segment[hash_key];
+    while (offset != -1) {
+	guidentry = (MSFT_GuidEntry *)&This->typelib_segment_data[MSFT_SEG_GUID][offset];
+
+	if (!memcmp(guidentry, guid, sizeof(GUID))) return offset;
+
+	offset = guidentry->next_hash;
+    }
+
+    return offset;
+}
+
+/****************************************************************************
  *	ctl2_find_name
  *
  *  Locates a name in a type library.
@@ -306,7 +358,7 @@
  */
 static int ctl2_encode_name(
 	ICreateTypeLib2Impl *This, /* [I] The typelib to operate against (used for LCID only). */
-	WCHAR *name,               /* [I] The name string to encode. */
+	const WCHAR *name,         /* [I] The name string to encode. */
 	char **result)             /* [O] A pointer to a pointer to receive the encoded name. */
 {
     int length;
@@ -350,7 +402,7 @@
  */
 static int ctl2_encode_string(
 	ICreateTypeLib2Impl *This, /* [I] The typelib to operate against (not used?). */
-	WCHAR *string,             /* [I] The string to encode. */
+	const WCHAR *string,       /* [I] The string to encode. */
 	char **result)             /* [O] A pointer to a pointer to receive the encoded string. */
 {
     int length;
@@ -497,17 +549,12 @@
 {
     int offset;
     MSFT_GuidEntry *guid_space;
-    int hash;
     int hash_key;
-    int i;
 
-    for (offset = 0; offset < This->typelib_segdir[MSFT_SEG_GUID].length;
-	 offset += sizeof(MSFT_GuidEntry)) {
-	if (!memcmp(&(This->typelib_segment_data[MSFT_SEG_GUID][offset]),
-		    guid, sizeof(GUID))) {
-	    return offset;
-	}
-    }
+    hash_key = ctl2_hash_guid(&guid->guid);
+
+    offset = ctl2_find_guid(This, hash_key, &guid->guid);
+    if (offset != -1) return offset;
 
     offset = ctl2_alloc_segment(This, MSFT_SEG_GUID, sizeof(MSFT_GuidEntry), 0);
     if (offset == -1) return -1;
@@ -515,17 +562,9 @@
     guid_space = (void *)(This->typelib_segment_data[MSFT_SEG_GUID] + offset);
     *guid_space = *guid;
 
-    hash = 0;
-    for (i = 0; i < 16; i += 2) {
-	hash ^= *((short *)&This->typelib_segment_data[MSFT_SEG_GUID][offset + i]);
-    }
-
-    hash_key = (hash & 0xf) | ((hash & 0x10) & (0 - !!(hash & 0xe0)));
-    guid_space->unk14 = This->typelib_guidhash_segment[hash_key];
+    guid_space->next_hash = This->typelib_guidhash_segment[hash_key];
     This->typelib_guidhash_segment[hash_key] = offset;
 
-    TRACE("Updating GUID hash table (%s,0x%x).\n", debugstr_guid(&guid->guid), hash);
-
     return offset;
 }
 
@@ -542,7 +581,7 @@
  */
 static int ctl2_alloc_name(
 	ICreateTypeLib2Impl *This, /* [I] The type library to allocate in. */
-	WCHAR *name)               /* [I] The name to store. */
+	const WCHAR *name)         /* [I] The name to store. */
 {
     int length;
     int offset;
@@ -558,12 +597,12 @@
     if (offset == -1) return -1;
 
     name_space = (void *)(This->typelib_segment_data[MSFT_SEG_NAME] + offset);
-    name_space->unk00 = -1;
-    name_space->unk10 = -1;
+    name_space->hreftype = -1;
+    name_space->next_hash = -1;
     memcpy(&name_space->namelen, encoded_name, length);
 
     if (This->typelib_namehash_segment[encoded_name[2] & 0x7f] != -1)
-	name_space->unk10 = This->typelib_namehash_segment[encoded_name[2] & 0x7f];
+	name_space->next_hash = This->typelib_namehash_segment[encoded_name[2] & 0x7f];
 
     This->typelib_namehash_segment[encoded_name[2] & 0x7f] = offset;
 
@@ -585,7 +624,7 @@
  */
 static int ctl2_alloc_string(
 	ICreateTypeLib2Impl *This, /* [I] The type library to allocate in. */
-	WCHAR *string)             /* [I] The string to store. */
+	const WCHAR *string)       /* [I] The string to store. */
 {
     int length;
     int offset;
@@ -659,7 +698,7 @@
 	int guidoffset,            /* [I] The offset to the GUID for the imported library. */
 	int major_version,         /* [I] The major version number of the imported library. */
 	int minor_version,         /* [I] The minor version number of the imported library. */
-	WCHAR *filename)           /* [I] The filename of the imported library. */
+	const WCHAR *filename)     /* [I] The filename of the imported library. */
 {
     int length;
     int offset;
@@ -751,8 +790,8 @@
 
     guidentry.guid = *guid;
 
-    guidentry.unk10 = -1;
-    guidentry.unk14 = -1;
+    guidentry.hreftype = -1;
+    guidentry.next_hash = -1;
 
     guidoffset = ctl2_alloc_guid(This, &guidentry);
     if (guidoffset == -1) return E_OUTOFMEMORY;
@@ -1020,6 +1059,39 @@
     return offset;
 }
 
+/****************************************************************************
+ *	ctl2_find_typeinfo_from_offset
+ *
+ *  Finds an ITypeInfo given an offset into the TYPEINFO segment.
+ *
+ * RETURNS
+ *
+ *  Success: S_OK.
+ *  Failure: TYPE_E_ELEMENTNOTFOUND.
+ */
+static HRESULT ctl2_find_typeinfo_from_offset(
+	ICreateTypeLib2Impl *This, /* [I] The typelib to find the typeinfo in. */
+	int offset,                /* [I] The offset of the desired typeinfo. */
+	ITypeInfo **ppTinfo)       /* [I] The typeinfo found. */
+{
+    void *typeinfodata;
+    ICreateTypeInfo2Impl *typeinfo;
+
+    typeinfodata = &This->typelib_segment_data[MSFT_SEG_TYPEINFO][offset];
+
+    for (typeinfo = This->typeinfos; typeinfo; typeinfo = typeinfo->next_typeinfo) {
+	if (typeinfo->typeinfo == typeinfodata) {
+	    *ppTinfo = (ITypeInfo *)&typeinfo->lpVtblTypeInfo2;
+	    ITypeInfo2_AddRef(*ppTinfo);
+	    return S_OK;
+	}
+    }
+
+    ERR("Failed to find typeinfo, invariant varied.\n");
+
+    return TYPE_E_ELEMENTNOTFOUND;
+}
+
 /*================== ICreateTypeInfo2 Implementation ===================================*/
 
 /******************************************************************************
@@ -1032,7 +1104,7 @@
 	REFIID riid,
 	VOID **ppvObject)
 {
-    ICOM_THIS( ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     TRACE("(%p)->(IID: %s)\n",This,debugstr_guid(riid));
 
@@ -1064,7 +1136,7 @@
  */
 static ULONG WINAPI ICreateTypeInfo2_fnAddRef(ICreateTypeInfo2 *iface)
 {
-    ICOM_THIS( ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     TRACE("(%p)->ref was %u\n",This, This->ref);
 
@@ -1078,7 +1150,7 @@
  */
 static ULONG WINAPI ICreateTypeInfo2_fnRelease(ICreateTypeInfo2 *iface)
 {
-    ICOM_THIS( ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     --(This->ref);
 
@@ -1106,7 +1178,7 @@
  */
 static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface, REFGUID guid)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     MSFT_GuidEntry guidentry;
     int offset;
@@ -1114,8 +1186,8 @@
     TRACE("(%p,%s)\n", iface, debugstr_guid(guid));
 
     guidentry.guid = *guid;
-    guidentry.unk10 = 0;
-    guidentry.unk14 = 0x18;
+    guidentry.hreftype = This->typelib->typelib_typeinfo_offsets[This->typeinfo->typekind >> 16];
+    guidentry.next_hash = -1;
 
     offset = ctl2_alloc_guid(This->typelib, &guidentry);
     
@@ -1123,6 +1195,10 @@
 
     This->typeinfo->posguid = offset;
 
+    if (IsEqualIID(guid, &IID_IDispatch)) {
+	This->typelib->typelib_header.dispatchpos = This->typelib->typelib_typeinfo_offsets[This->typeinfo->typekind >> 16];
+    }
+
     return S_OK;
 }
 
@@ -1133,7 +1209,7 @@
  */
 static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface, UINT uTypeFlags)
 {
-    ICOM_THIS( ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     TRACE("(%p,0x%x)\n", iface, uTypeFlags);
 
@@ -1144,11 +1220,11 @@
 	int guidoffset;
 	int fileoffset;
 	MSFT_ImpInfo impinfo;
-	WCHAR stdole2tlb[] = { 's','t','d','o','l','e','2','.','t','l','b',0 };
+	static const WCHAR stdole2tlb[] = { 's','t','d','o','l','e','2','.','t','l','b',0 };
 
 	foo.guid = IID_StdOle;
-	foo.unk10 = 2;
-	foo.unk14 = -1;
+	foo.hreftype = 2;
+	foo.next_hash = -1;
 	guidoffset = ctl2_alloc_guid(This->typelib, &foo);
 	if (guidoffset == -1) return E_OUTOFMEMORY;
 
@@ -1156,8 +1232,8 @@
 	if (fileoffset == -1) return E_OUTOFMEMORY;
 
 	foo.guid = IID_IDispatch;
-	foo.unk10 = 1;
-	foo.unk14 = -1;
+	foo.hreftype = 1;
+	foo.next_hash = -1;
 	guidoffset = ctl2_alloc_guid(This->typelib, &foo);
 	if (guidoffset == -1) return E_OUTOFMEMORY;
 
@@ -1186,7 +1262,7 @@
         ICreateTypeInfo2* iface,
         LPOLESTR pStrDoc)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     int offset;
 
@@ -1207,8 +1283,13 @@
         ICreateTypeInfo2* iface,
         DWORD dwHelpContext)
 {
-    FIXME("(%p,%ld), stub!\n", iface, dwHelpContext);
-    return E_OUTOFMEMORY;
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
+
+    TRACE("(%p,%ld)\n", iface, dwHelpContext);
+
+    This->typeinfo->helpcontext = dwHelpContext;
+
+    return S_OK;
 }
 
 /******************************************************************************
@@ -1221,7 +1302,7 @@
         WORD wMajorVerNum,
         WORD wMinorVerNum)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     TRACE("(%p,%d,%d)\n", iface, wMajorVerNum, wMinorVerNum);
 
@@ -1239,7 +1320,7 @@
         ITypeInfo* pTInfo,
         HREFTYPE* phRefType)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     ITypeLib *container;
     int index;
@@ -1281,7 +1362,7 @@
         UINT index,
         FUNCDESC* pFuncDesc)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     int offset;
     int *typedata;
@@ -1365,7 +1446,7 @@
         UINT index,
         HREFTYPE hRefType)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     TRACE("(%p,%d,%ld)\n", iface, index, hRefType);
 
@@ -1434,7 +1515,7 @@
         UINT index,
         INT implTypeFlags)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
     int offset;
     MSFT_RefRecord *ref;
 
@@ -1462,7 +1543,7 @@
         ICreateTypeInfo2* iface,
         WORD cbAlignment)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     TRACE("(%p,%d)\n", iface, cbAlignment);
 
@@ -1520,7 +1601,7 @@
         UINT index,
         VARDESC* pVarDesc)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
     int offset;
     INT *typedata;
     int var_datawidth;
@@ -1613,7 +1694,7 @@
         LPOLESTR* rgszNames,
         UINT cNames)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     int i;
     int offset;
@@ -1651,7 +1732,7 @@
         UINT index,
         LPOLESTR szName)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
     int offset;
     char *namedata;
 
@@ -1666,8 +1747,10 @@
     if (offset == -1) return E_OUTOFMEMORY;
 
     namedata = This->typelib->typelib_segment_data[MSFT_SEG_NAME] + offset;
-    *((INT *)namedata) = This->typelib->typelib_typeinfo_offsets[This->typeinfo->typekind >> 16];
-    namedata[9] = 0x10;
+    if (*((INT *)namedata) == -1) {
+	*((INT *)namedata) = This->typelib->typelib_typeinfo_offsets[This->typeinfo->typekind >> 16];
+	namedata[9] |= 0x10;
+    }
     if ((This->typeinfo->typekind & 15) == TKIND_ENUM) {
 	namedata[9] |= 0x20;
     }
@@ -1685,8 +1768,25 @@
         ICreateTypeInfo2* iface,
         TYPEDESC* pTDescAlias)
 {
-    FIXME("(%p,%p), stub!\n", iface, pTDescAlias);
-    return E_OUTOFMEMORY;
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
+
+    int encoded_typedesc;
+    int width;
+
+    if ((This->typeinfo->typekind & 15) != TKIND_ALIAS) {
+	return TYPE_E_WRONGTYPEKIND;
+    }
+
+    FIXME("(%p,%p), hack!\n", iface, pTDescAlias);
+
+    if (ctl2_encode_typedesc(This->typelib, pTDescAlias, &encoded_typedesc, &width, NULL, NULL) == -1) {
+	return E_OUTOFMEMORY;
+    }
+
+    This->typeinfo->size = width;
+    This->typeinfo->datatype1 = encoded_typedesc;
+
+    return S_OK;
 }
 
 /******************************************************************************
@@ -1728,7 +1828,7 @@
         UINT index,
         LPOLESTR szDocString)
 {
-    ICOM_THIS(ICreateTypeInfo2Impl, iface);
+    ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
 
     FIXME("(%p,%d,%s), stub!\n", iface, index, debugstr_w(szDocString));
 
@@ -2698,9 +2798,8 @@
 
 /*================== ICreateTypeInfo2 & ITypeInfo2 VTABLEs And Creation ===================================*/
 
-static ICOM_VTABLE(ICreateTypeInfo2) ctypeinfo2vt =
+static ICreateTypeInfo2Vtbl ctypeinfo2vt =
 {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 
     ICreateTypeInfo2_fnQueryInterface,
     ICreateTypeInfo2_fnAddRef,
@@ -2747,9 +2846,8 @@
     ICreateTypeInfo2_fnSetName
 };
 
-static ICOM_VTABLE(ITypeInfo2) typeinfo2vt =
+static ITypeInfo2Vtbl typeinfo2vt =
 {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 
     ITypeInfo2_fnQueryInterface,
     ITypeInfo2_fnAddRef,
@@ -2873,7 +2971,7 @@
 	REFIID riid,
 	VOID **ppvObject)
 {
-    ICOM_THIS( ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     TRACE("(%p)->(IID: %s)\n",This,debugstr_guid(riid));
 
@@ -2905,7 +3003,7 @@
  */
 static ULONG WINAPI ICreateTypeLib2_fnAddRef(ICreateTypeLib2 *iface)
 {
-    ICOM_THIS( ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     TRACE("(%p)->ref was %u\n",This, This->ref);
 
@@ -2919,7 +3017,7 @@
  */
 static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface)
 {
-    ICOM_THIS( ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     --(This->ref);
 
@@ -2966,7 +3064,7 @@
 	TYPEKIND tkind,
 	ICreateTypeInfo **ppCTInfo)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     TRACE("(%p,%s,%d,%p)\n", iface, debugstr_w(szName), tkind, ppCTInfo);
 
@@ -2986,7 +3084,7 @@
 	ICreateTypeLib2 * iface,
 	LPOLESTR szName)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     int offset;
 
@@ -3005,7 +3103,7 @@
  */
 static HRESULT WINAPI ICreateTypeLib2_fnSetVersion(ICreateTypeLib2 * iface, WORD wMajorVerNum, WORD wMinorVerNum)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     TRACE("(%p,%d,%d)\n", iface, wMajorVerNum, wMinorVerNum);
 
@@ -3020,7 +3118,7 @@
  */
 static HRESULT WINAPI ICreateTypeLib2_fnSetGuid(ICreateTypeLib2 * iface, REFGUID guid)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     MSFT_GuidEntry guidentry;
     int offset;
@@ -3028,8 +3126,8 @@
     TRACE("(%p,%s)\n", iface, debugstr_guid(guid));
 
     guidentry.guid = *guid;
-    guidentry.unk10 = -2;
-    guidentry.unk14 = -1;
+    guidentry.hreftype = -2;
+    guidentry.next_hash = -1;
 
     offset = ctl2_alloc_guid(This, &guidentry);
     
@@ -3047,7 +3145,7 @@
  */
 static HRESULT WINAPI ICreateTypeLib2_fnSetDocString(ICreateTypeLib2 * iface, LPOLESTR szDoc)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     int offset;
 
@@ -3066,7 +3164,7 @@
  */
 static HRESULT WINAPI ICreateTypeLib2_fnSetHelpFileName(ICreateTypeLib2 * iface, LPOLESTR szHelpFileName)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     int offset;
 
@@ -3097,7 +3195,7 @@
  */
 static HRESULT WINAPI ICreateTypeLib2_fnSetLcid(ICreateTypeLib2 * iface, LCID lcid)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     TRACE("(%p,%ld)\n", iface, lcid);
 
@@ -3113,7 +3211,7 @@
  */
 static HRESULT WINAPI ICreateTypeLib2_fnSetLibFlags(ICreateTypeLib2 * iface, UINT uLibFlags)
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     TRACE("(%p,0x%x)\n", iface, uLibFlags);
 
@@ -3124,14 +3222,19 @@
 
 static int ctl2_write_chunk(HANDLE hFile, void *segment, int length)
 {
-    if (!WriteFile(hFile, segment, length, NULL, 0)) {CloseHandle(hFile); return 0;}
+    DWORD dwWritten;
+    if (!WriteFile(hFile, segment, length, &dwWritten, 0)) {
+        CloseHandle(hFile);
+        return 0;
+    }
     return -1;
 }
 
 static int ctl2_write_segment(ICreateTypeLib2Impl *This, HANDLE hFile, int segment)
 {
+    DWORD dwWritten;
     if (!WriteFile(hFile, This->typelib_segment_data[segment],
-		   This->typelib_segdir[segment].length, NULL, 0)) {
+		   This->typelib_segdir[segment].length, &dwWritten, 0)) {
 	CloseHandle(hFile);
 	return 0;
     }
@@ -3184,7 +3287,7 @@
  */
 static HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 * iface)
 {
-    ICOM_THIS( ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     int retval;
     int filepos;
@@ -3275,7 +3378,7 @@
 	REFGUID guid,            /* [I] The GUID used as a key to retrieve the custom data. */
 	VARIANT *pVarVal)        /* [I] The custom data itself. */
 {
-    ICOM_THIS(ICreateTypeLib2Impl, iface);
+    ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
 
     TRACE("(%p,%s,%p)\n", iface, debugstr_guid(guid), pVarVal);
 
@@ -3364,11 +3467,11 @@
 static UINT WINAPI ITypeLib2_fnGetTypeInfoCount(
         ITypeLib2 * iface)
 {
-/*     ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */
+    ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface);
 
-    FIXME("(%p), stub!\n", iface);
+    TRACE("(%p)\n", iface);
 
-    return 0;
+    return This->typelib_header.nrtypeinfos;
 }
 
 /******************************************************************************
@@ -3381,11 +3484,15 @@
         UINT index,
         ITypeInfo** ppTInfo)
 {
-/*     ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */
+    ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface);
 
-    FIXME("(%p,%d,%p), stub!\n", iface, index, ppTInfo);
+    TRACE("(%p,%d,%p)\n", iface, index, ppTInfo);
 
-    return E_OUTOFMEMORY;
+    if ((index < 0) || (index >= This->typelib_header.nrtypeinfos)) {
+	return TYPE_E_ELEMENTNOTFOUND;
+    }
+
+    return ctl2_find_typeinfo_from_offset(This, This->typelib_typeinfo_offsets[index], ppTInfo);
 }
 
 /******************************************************************************
@@ -3398,11 +3505,17 @@
         UINT index,
         TYPEKIND* pTKind)
 {
-/*     ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */
+    ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface);
 
-    FIXME("(%p,%d,%p), stub!\n", iface, index, pTKind);
+    TRACE("(%p,%d,%p)\n", iface, index, pTKind);
 
-    return E_OUTOFMEMORY;
+    if ((index < 0) || (index >= This->typelib_header.nrtypeinfos)) {
+	return TYPE_E_ELEMENTNOTFOUND;
+    }
+
+    *pTKind = (This->typelib_segment_data[MSFT_SEG_TYPEINFO][This->typelib_typeinfo_offsets[index]]) & 15;
+
+    return S_OK;
 }
 
 /******************************************************************************
@@ -3415,11 +3528,20 @@
         REFGUID guid,
         ITypeInfo** ppTinfo)
 {
-/*     ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */
+    ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface);
 
-    FIXME("(%p,%s,%p), stub!\n", iface, debugstr_guid(guid), ppTinfo);
+    int guidoffset;
+    int typeinfo;
 
-    return E_OUTOFMEMORY;
+    TRACE("(%p,%s,%p)\n", iface, debugstr_guid(guid), ppTinfo);
+
+    guidoffset = ctl2_find_guid(This, ctl2_hash_guid(guid), guid);
+    if (guidoffset == -1) return TYPE_E_ELEMENTNOTFOUND;
+
+    typeinfo = ((MSFT_GuidEntry *)&This->typelib_segment_data[MSFT_SEG_GUID][guidoffset])->hreftype;
+    if (typeinfo < 0) return TYPE_E_ELEMENTNOTFOUND;
+
+    return ctl2_find_typeinfo_from_offset(This, typeinfo, ppTinfo);
 }
 
 /******************************************************************************
@@ -3485,11 +3607,29 @@
         ULONG lHashVal,
         BOOL* pfName)
 {
-/*     ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */
+    ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface);
+
+    char *encoded_name;
+    int nameoffset;
+    MSFT_NameIntro *nameintro;
 
-    FIXME("(%p,%s,%lx,%p), stub!\n", iface, debugstr_w(szNameBuf), lHashVal, pfName);
+    TRACE("(%p,%s,%lx,%p)\n", iface, debugstr_w(szNameBuf), lHashVal, pfName);
 
-    return E_OUTOFMEMORY;
+    ctl2_encode_name(This, szNameBuf, &encoded_name);
+    nameoffset = ctl2_find_name(This, encoded_name);
+
+    *pfName = 0;
+
+    if (nameoffset == -1) return S_OK;
+
+    nameintro = (MSFT_NameIntro *)(&This->typelib_segment_data[MSFT_SEG_NAME][nameoffset]);
+    if (nameintro->hreftype == -1) return S_OK;
+
+    *pfName = 1;
+
+    FIXME("Should be decoding our copy of the name over szNameBuf.\n");
+
+    return S_OK;
 }
 
 /******************************************************************************
@@ -3620,9 +3760,8 @@
 
 /*================== ICreateTypeLib2 & ITypeLib2 VTABLEs And Creation ===================================*/
 
-static ICOM_VTABLE(ICreateTypeLib2) ctypelib2vt =
+static ICreateTypeLib2Vtbl ctypelib2vt =
 {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 
     ICreateTypeLib2_fnQueryInterface,
     ICreateTypeLib2_fnAddRef,
@@ -3645,9 +3784,8 @@
     ICreateTypeLib2_fnSetHelpStringDll
 };
 
-static ICOM_VTABLE(ITypeLib2) typelib2vt =
+static ITypeLib2Vtbl typelib2vt =
 {
-    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
 
     ITypeLib2_fnQueryInterface,
     ITypeLib2_fnAddRef,
@@ -3742,3 +3880,33 @@
     *ppctlib = ICreateTypeLib2_Constructor(syskind, szFile);
     return (*ppctlib)? S_OK: E_OUTOFMEMORY;
 }
+
+/******************************************************************************
+ * ClearCustData (OLEAUT32.171)
+ *
+ * Clear a custom data types' data.
+ *
+ * PARAMS
+ *  lpCust [I] The custom data type instance
+ *
+ * RETURNS
+ *  Nothing.
+ */
+void WINAPI ClearCustData(LPCUSTDATA lpCust)
+{
+    if (lpCust && lpCust->cCustData)
+    {
+        if (lpCust->prgCustData)
+        {
+            DWORD i;
+
+            for (i = 0; i < lpCust->cCustData; i++)
+                VariantClear(&lpCust->prgCustData[i].varValue);
+
+            /* FIXME - Should be using a per-thread IMalloc */
+            HeapFree(GetProcessHeap(), 0, lpCust->prgCustData);
+            lpCust->prgCustData = NULL;
+        }
+        lpCust->cCustData = 0;
+    }
+}

reactos/lib/uuid
uuid.c 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- uuid.c	20 Sep 2004 19:47:13 -0000	1.2
+++ uuid.c	1 Dec 2004 20:06:15 -0000	1.3
@@ -82,3 +82,8 @@
 DEFINE_GUID(FMTID_SummaryInformation,0xF29F85E0,0x4FF9,0x1068,0xAB,0x91,0x08,0x00,0x2B,0x27,0xB3,0xD9);
 DEFINE_GUID(FMTID_DocSummaryInformation,0xD5CDD502,0x2E9C,0x101B,0x93,0x97,0x08,0x00,0x2B,0x2C,0xF9,0xAE);
 DEFINE_GUID(FMTID_UserDefinedProperties,0xD5CDD505,0x2E9C,0x101B,0x93,0x97,0x08,0x00,0x2B,0x2C,0xF9,0xAE);
+
+DEFINE_OLEGUID(IID_StdOle,0x00020430,0,0);
+
+DEFINE_GUID(CLSID_StdFont,0x0be35203,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);
+DEFINE_GUID(CLSID_StdPicture,0x0be35204,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51);

reactos/w32api/include
oaidl.h 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- oaidl.h	2 Mar 2004 10:25:59 -0000	1.7
+++ oaidl.h	1 Dec 2004 20:06:15 -0000	1.8
@@ -424,7 +424,8 @@
 	TYPEFLAG_FDUAL=64,TYPEFLAG_FNONEXTENSIBLE=128,
 	TYPEFLAG_FOLEAUTOMATION=256,TYPEFLAG_FRESTRICTED=512,
 	TYPEFLAG_FAGGREGATABLE=1024,TYPEFLAG_FREPLACEABLE=2048,
-	TYPEFLAG_FDISPATCHABLE=4096,TYPEFLAG_FREVERSEBIND=8192
+	TYPEFLAG_FDISPATCHABLE=4096,TYPEFLAG_FREVERSEBIND=8192,
+	TYPEFLAG_FPROXY=16384
 } TYPEFLAGS;
 typedef enum tagFUNCFLAGS {
 	FUNCFLAG_FRESTRICTED=1,FUNCFLAG_FSOURCE=2,FUNCFLAG_FBINDABLE=4,
@@ -502,6 +503,16 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define IEnumVARIANT_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IEnumVARIANT_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IEnumVARIANT_Release(p) (p)->lpVtbl->Release(p)
+#define IEnumVARIANT_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
+#define IEnumVARIANT_Skip(p,a) (p)->lpVtbl->Skip(p,a)
+#define IEnumVARIANT_Reset(p) (p)->lpVtbl->Reset(p)
+#define IEnumVARIANT_Clone(p,a) (p)->lpVtbl->Clone(p,a)
+#endif
+
 #define INTERFACE ITypeComp
 DECLARE_INTERFACE_(ITypeComp,IUnknown)
 {
@@ -513,6 +524,14 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define ITypeComp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITypeComp_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITypeComp_Release(p) (p)->lpVtbl->Release(p)
+#define ITypeComp_Bind(p,a,b,c,d,e,f) (p)->lpVtbl->Bind(p,a,b,c,d,e,f)
+#define ITypeComp_BindType(p,a,b,c,d) (p)->lpVtbl->BindType(p,a,b,c,d)
+#endif
+
 #define INTERFACE ITypeInfo
 DECLARE_INTERFACE_(ITypeInfo,IUnknown)
 {
@@ -609,6 +628,46 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define ITypeInfo2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITypeInfo2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITypeInfo2_Release(p) (p)->lpVtbl->Release(p)
+#define ITypeInfo2_GetTypeAttr(p,a) (p)->lpVtbl->GetTypeAttr(p,a)
+#define ITypeInfo2_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
+#define ITypeInfo2_GetFuncDesc(p,a,b) (p)->lpVtbl->GetFuncDesc(p,a,b)
+#define ITypeInfo2_GetVarDesc(p,a,b) (p)->lpVtbl->GetVarDesc(p,a,b)
+#define ITypeInfo2_GetNames(p,a,b,c,d) (p)->lpVtbl->GetNames(p,a,b,c,d)
+#define ITypeInfo2_GetRefTypeOfImplType(p,a,b) (p)->lpVtbl->GetRefTypeOfImplType(p,a,b)
+#define ITypeInfo2_GetImplTypeFlags(p,a,b) (p)->lpVtbl->GetImplTypeFlags(p,a,b)
+#define ITypeInfo2_GetIDsOfNames(p,a,b,c) (p)->lpVtbl->GetIDsOfNames(p,a,b,c)
+#define ITypeInfo2_Invoke(p,a,b,c,d,e,f,g) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g)
+#define ITypeInfo2_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
+#define ITypeInfo2_GetDllEntry(p,a,b,c,d,e) (p)->lpVtbl->GetDllEntry(p,a,b,c,d,e)
+#define ITypeInfo2_GetRefTypeInfo(p,a,b) (p)->lpVtbl->GetRefTypeInfo(p,a,b)
+#define ITypeInfo2_AddressOfMember(p,a,b,c) (p)->lpVtbl->AddressOfMember(p,a,b,c)
+#define ITypeInfo2_CreateInstance(p,a,b,c) (p)->lpVtbl->CreateInstance(p,a,b,c)
+#define ITypeInfo2_GetMops(p,a,b) (p)->lpVtbl->GetMops(p,a,b)
+#define ITypeInfo2_GetContainingTypeLib(p,a,b) (p)->lpVtbl->GetContainingTypeLib(p,a,b)
+#define ITypeInfo2_ReleaseTypeAttr(p,a) (p)->lpVtbl->ReleaseTypeAttr(p,a)
+#define ITypeInfo2_ReleaseFuncDesc(p,a) (p)->lpVtbl->ReleaseFuncDesc(p,a)
+#define ITypeInfo2_ReleaseVarDesc(p,a) (p)->lpVtbl->ReleaseVarDesc(p,a)
+#define ITypeInfo2_GetTypeKind(p,a) (p)->lpVtbl->GetTypeKind(p,a)
+#define ITypeInfo2_GetTypeFlags(p,a) (p)->lpVtbl->GetTypeFlags(p,a)
+#define ITypeInfo2_GetFuncIndexOfMemId(p,a,b,c) (p)->lpVtbl->GetFuncIndexOfMemId(p,a,b,c)
+#define ITypeInfo2_GetVarIndexOfMemId(p,a,b) (p)->lpVtbl->GetVarIndexOfMemId(p,a,b)
+#define ITypeInfo2_GetCustData(p,a,b) (p)->lpVtbl->GetCustData(p,a,b)
+#define ITypeInfo2_GetFuncCustData(p,a,b,c) (p)->lpVtbl->GetFuncCustData(p,a,b,c)
+#define ITypeInfo2_GetParamCustData(p,a,b,c,d) (p)->lpVtbl->GetParamCustData(p,a,b,c,d)
+#define ITypeInfo2_GetVarCustData(p,a,b,c) (p)->lpVtbl->GetVarCustData(p,a,b,c)
+#define ITypeInfo2_GetImplTypeCustData(p,a,b,c) (p)->lpVtbl->GetImplTypeCustData(p,a,b,c)
+#define ITypeInfo2_GetDocumentation2(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation2(p,a,b,c,d,e)
+#define ITypeInfo2_GetAllCustData(p,a) (p)->lpVtbl->GetAllCustData(p,a)
+#define ITypeInfo2_GetAllFuncCustData(p,a,b) (p)->lpVtbl->GetAllFuncCustData(p,a,b)
+#define ITypeInfo2_GetAllParamCustData(p,a,b,c) (p)->lpVtbl->GetAllParamCustData(p,a,b,c)
+#define ITypeInfo2_GetAllVarCustData(p,a,b) (p)->lpVtbl->GetAllVarCustData(p,a,b)
+#define ITypeInfo2_GetAllImplTypeCustData(p,a,b) (p)->lpVtbl->GetAllImplTypeCustData(p,a,b)
+#endif
+
 #define INTERFACE ITypeLib
 DECLARE_INTERFACE_(ITypeLib,IUnknown)
 {
@@ -620,7 +679,7 @@
 	STDMETHOD(GetTypeInfoType)(THIS_ UINT,TYPEKIND*) PURE;
 	STDMETHOD(GetTypeInfoOfGuid)(THIS_ REFGUID,ITypeInfo**) PURE;
 	STDMETHOD(GetLibAttr)(THIS_ TLIBATTR**) PURE;
-	STDMETHOD(GetTypeComp)(THIS_ ITypeComp*) PURE;
+	STDMETHOD(GetTypeComp)(THIS_ LPTYPECOMP*) PURE;
 	STDMETHOD(GetDocumentation)(THIS_ INT,BSTR*,BSTR*,DWORD*,BSTR*) PURE;
 	STDMETHOD(IsName)(THIS_ LPOLESTR,ULONG,BOOL*) PURE;
 	STDMETHOD(FindName)(THIS_ LPOLESTR,ULONG,ITypeInfo**,MEMBERID*,USHORT*) PURE;
@@ -628,6 +687,22 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define ITypeLib_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITypeLib_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITypeLib_Release(p) (p)->lpVtbl->Release(p)
+#define ITypeLib_GetTypeInfoCount(p) (p)->lpVtbl->GetTypeInfoCount(p)
+#define ITypeLib_GetTypeInfo(p,a,b) (p)->lpVtbl->GetTypeInfo(p,a,b)
+#define ITypeLib_GetTypeInfoType(p,a,b) (p)->lpVtbl->GetTypeInfoType(p,a,b)
+#define ITypeLib_GetTypeInfoOfGuid(p,a,b) (p)->lpVtbl->GetTypeInfoOfGuid(p,a,b)
+#define ITypeLib_GetLibAttr(p,a) (p)->lpVtbl->GetLibAttr(p,a)
+#define ITypeLib_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
+#define ITypeLib_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
+#define ITypeLib_IsName(p,a,b,c) (p)->lpVtbl->IsName(p,a,b,c)
+#define ITypeLib_FindName(p,a,b,c,d,e) (p)->lpVtbl->FindName(p,a,b,c,d,e)
+#define ITypeLib_ReleaseTLibAttr(p,a) (p)->lpVtbl->ReleaseTLibAttr(p,a)
+#endif
+
 #define INTERFACE ITypeLib2
 DECLARE_INTERFACE_(ITypeLib2,ITypeLib)
 {
@@ -639,7 +714,7 @@
 	STDMETHOD(GetTypeInfoType)(THIS_ UINT,TYPEKIND*) PURE;
 	STDMETHOD(GetTypeInfoOfGuid)(THIS_ REFGUID,ITypeInfo**) PURE;
 	STDMETHOD(GetLibAttr)(THIS_ TLIBATTR**) PURE;
-	STDMETHOD(GetTypeComp)(THIS_ ITypeComp*) PURE;
+	STDMETHOD(GetTypeComp)(THIS_ LPTYPECOMP*) PURE;
 	STDMETHOD(GetDocumentation)(THIS_ INT,BSTR*,BSTR*,DWORD*,BSTR*) PURE;
 	STDMETHOD(IsName)(THIS_ LPOLESTR,ULONG,BOOL*) PURE;
 	STDMETHOD(FindName)(THIS_ LPOLESTR,ULONG,ITypeInfo**,MEMBERID*,USHORT*) PURE;
@@ -651,6 +726,274 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define ITypeLib2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITypeLib2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITypeLib2_Release(p) (p)->lpVtbl->Release(p)
+#define ITypeLib2_GetTypeInfoCount(p) (p)->lpVtbl->GetTypeInfoCount(p)
+#define ITypeLib2_GetTypeInfo(p,a,b) (p)->lpVtbl->GetTypeInfo(p,a,b)
+#define ITypeLib2_GetTypeInfoType(p,a,b) (p)->lpVtbl->GetTypeInfoType(p,a,b)
+#define ITypeLib2_GetTypeInfoOfGuid(p,a,b) (p)->lpVtbl->GetTypeInfoOfGuid(p,a,b)
+#define ITypeLib2_GetLibAttr(p,a) (p)->lpVtbl->GetLibAttr(p,a)
+#define ITypeLib2_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
+#define ITypeLib2_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
+#define ITypeLib2_IsName(p,a,b,c) (p)->lpVtbl->IsName(p,a,b,c)
+#define ITypeLib2_FindName(p,a,b,c,d,e) (p)->lpVtbl->FindName(p,a,b,c,d,e)
+#define ITypeLib2_ReleaseTLibAttr(p,a) (p)->lpVtbl->ReleaseTLibAttr(p,a)
+#define ITypeLib2_GetCustData(p,a,b) (p)->lpVtbl->GetCustData(p,a,b)
+#define ITypeLib2_GetLibStatistics(p,a,b) (p)->lpVtbl->GetLibStatistics(p,a,b)
+#define ITypeLib2_GetDocumentation2(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation2(p,a,b,c,d,e)
+#define ITypeLib2_GetAllCustData(p,a) (p)->lpVtbl->GetAllCustData(p,a)
+#endif
+
+#define INTERFACE ITypeFactory
+DECLARE_INTERFACE_(ITypeFactory,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(GetAllCustData)(THIS_ CUSTDATA*) PURE;
+    STDMETHOD(CreateFromTypeInfo)(THIS_ LPTYPEINFO,REFIID,LPUNKNOWN*);
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define ITypeFactory_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ITypeFactory_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ITypeFactory_Release(p) (p)->lpVtbl->Release(p)
+#define ITypeFactory_CreateFromTypeInfo(p,a,b,c) (p)->lpVtbl->CreateFromTypeInfo(p,a,b,c)
+#endif
+
+#define INTERFACE ICreateTypeInfo
+DECLARE_INTERFACE_(ICreateTypeInfo,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(SetGuid)(THIS_ REFGUID) PURE;
+	STDMETHOD(SetTypeFlags)(THIS_ UINT) PURE;
+	STDMETHOD(SetDocString)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetHelpContext)(THIS_ DWORD) PURE;
+	STDMETHOD(SetVersion)(THIS_ WORD,WORD) PURE;
+	STDMETHOD(AddRefTypeInfo)(THIS_ ITypeInfo*,HREFTYPE*) PURE;
+	STDMETHOD(AddFuncDesc)(THIS_ UINT,FUNCDESC*) PURE;
+	STDMETHOD(AddImplType)(THIS_ UINT,HREFTYPE) PURE;
+	STDMETHOD(SetImplTypeFlags)(THIS_ UINT,INT) PURE;
+	STDMETHOD(SetAlignment)(THIS_ WORD) PURE;
+	STDMETHOD(SetSchema)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(AddVarDesc)(THIS_ UINT,VARDESC*) PURE;
+	STDMETHOD(SetFuncAndParamNames)(THIS_ UINT,LPOLESTR*,UINT) PURE;
+	STDMETHOD(SetVarName)(THIS_ UINT,LPOLESTR) PURE;
+	STDMETHOD(SetTypeDescAlias)(THIS_ TYPEDESC*) PURE;
+	STDMETHOD(DefineFuncAsDllEntry)(THIS_ UINT,LPOLESTR,LPOLESTR) PURE;
+	STDMETHOD(SetFuncDocString)(THIS_ UINT,LPOLESTR) PURE;
+	STDMETHOD(SetVarDocString)(THIS_ UINT,LPOLESTR) PURE;
+	STDMETHOD(SetFuncHelpContext)(THIS_ UINT,DWORD) PURE;
+	STDMETHOD(SetVarHelpContext)(THIS_ UINT,DWORD) PURE;
+	STDMETHOD(SetMops)(THIS_ UINT,BSTR) PURE;
+	STDMETHOD(SetTypeIdldesc)(THIS_ IDLDESC*) PURE;
+	STDMETHOD(LayOut)(THIS) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define ICreateTypeInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ICreateTypeInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ICreateTypeInfo_Release(p) (p)->lpVtbl->Release(p)
+#define ICreateTypeInfo_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
+#define ICreateTypeInfo_SetTypeFlags(p,a) (p)->lpVtbl->SetTypeFlags(p,a)
+#define ICreateTypeInfo_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
+#define ICreateTypeInfo_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
+#define ICreateTypeInfo_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
+#define ICreateTypeInfo_AddRefTypeInfo(p,a,b) (p)->lpVtbl->AddRefTypeInfo(p,a,b)
+#define ICreateTypeInfo_AddFuncDesc(p,a,b) (p)->lpVtbl->AddFuncDesc(p,a,b)
+#define ICreateTypeInfo_AddImplType(p,a,b) (p)->lpVtbl->AddImplType(p,a,b)
+#define ICreateTypeInfo_SetImplTypeFlags(p,a,b) (p)->lpVtbl->SetImplTypeFlags(p,a,b)
+#define ICreateTypeInfo_SetAlignment(p,a) (p)->lpVtbl->SetAlignment(p,a)
+#define ICreateTypeInfo_SetSchema(p,a) (p)->lpVtbl->SetSchema(p,a)
+#define ICreateTypeInfo_AddVarDesc(p,a,b) (p)->lpVtbl->AddVarDesc(p,a,b)
+#define ICreateTypeInfo_SetFuncAndParamNames(p,a,b,c) (p)->lpVtbl->SetFuncAndParamNames(p,a,b,c)
+#define ICreateTypeInfo_SetVarName(p,a,b) (p)->lpVtbl->SetVarName(p,a,b)
+#define ICreateTypeInfo_SetTypeDescAlias(p,a) (p)->lpVtbl->SetTypeDescAlias(p,a)
+#define ICreateTypeInfo_DefineFuncAsDllEntry(p,a,b,c) (p)->lpVtbl->DefineFuncAsDllEntry(p,a,b,c)
+#define ICreateTypeInfo_SetFuncDocString(p,a,b) (p)->lpVtbl->SetFuncDocString(p,a,b)
+#define ICreateTypeInfo_SetVarDocString(p,a,b) (p)->lpVtbl->SetVarDocString(p,a,b)
+#define ICreateTypeInfo_SetFuncHelpContext(p,a,b) (p)->lpVtbl->SetFuncHelpContext(p,a,b)
+#define ICreateTypeInfo_SetVarHelpContext(p,a,b) (p)->lpVtbl->SetVarHelpContext(p,a,b)
+#define ICreateTypeInfo_SetMops(p,a,b) (p)->lpVtbl->SetMops(p,a,b)
+#define ICreateTypeInfo_SetTypeIdldesc(p,a) (p)->lpVtbl->SetTypeIdldesc(p,a)
+#define ICreateTypeInfo_LayOut(p) (p)->lpVtbl->LayOut(p)
+#endif
+
+#define INTERFACE ICreateTypeInfo2
+DECLARE_INTERFACE_(ICreateTypeInfo2,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(SetGuid)(THIS_ REFGUID) PURE;
+	STDMETHOD(SetTypeFlags)(THIS_ UINT) PURE;
+	STDMETHOD(SetDocString)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetHelpContext)(THIS_ DWORD) PURE;
+	STDMETHOD(SetVersion)(THIS_ WORD,WORD) PURE;
+	STDMETHOD(AddRefTypeInfo)(THIS_ ITypeInfo*,HREFTYPE*) PURE;
+	STDMETHOD(AddFuncDesc)(THIS_ UINT,FUNCDESC*) PURE;
+	STDMETHOD(AddImplType)(THIS_ UINT,HREFTYPE) PURE;
+	STDMETHOD(SetImplTypeFlags)(THIS_ UINT,INT) PURE;
+	STDMETHOD(SetAlignment)(THIS_ WORD) PURE;
+	STDMETHOD(SetSchema)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(AddVarDesc)(THIS_ UINT,VARDESC*) PURE;
+	STDMETHOD(SetFuncAndParamNames)(THIS_ UINT,LPOLESTR*,UINT) PURE;
+	STDMETHOD(SetVarName)(THIS_ UINT,LPOLESTR) PURE;
+	STDMETHOD(SetTypeDescAlias)(THIS_ TYPEDESC*) PURE;
+	STDMETHOD(DefineFuncAsDllEntry)(THIS_ UINT,LPOLESTR,LPOLESTR) PURE;
+	STDMETHOD(SetFuncDocString)(THIS_ UINT,LPOLESTR) PURE;
+	STDMETHOD(SetVarDocString)(THIS_ UINT,LPOLESTR) PURE;
+	STDMETHOD(SetFuncHelpContext)(THIS_ UINT,DWORD) PURE;
+	STDMETHOD(SetVarHelpContext)(THIS_ UINT,DWORD) PURE;
+	STDMETHOD(SetMops)(THIS_ UINT,BSTR) PURE;
+	STDMETHOD(SetTypeIdldesc)(THIS_ IDLDESC*) PURE;
+	STDMETHOD(LayOut)(THIS) PURE;
+	STDMETHOD(DeleteFuncDesc)(THIS_ UINT) PURE;
+	STDMETHOD(DeleteFuncDescByMemId)(THIS_ MEMBERID, INVOKEKIND) PURE;
+	STDMETHOD(DeleteVarDesc)(THIS_ UINT) PURE;
+	STDMETHOD(DeleteVarDescByMemId)(THIS_ MEMBERID) PURE;        
+	STDMETHOD(DeleteImplType)(THIS_ UINT) PURE;        
+	STDMETHOD(SetCustData)(THIS_ REFGUID, VARIANT*) PURE;        
+	STDMETHOD(SetFuncCustData)(THIS_ UINT, REFGUID, VARIANT*) PURE;        
+	STDMETHOD(SetParamCustData)(THIS_ UINT, UINT, REFGUID, VARIANT*) PURE;        
+	STDMETHOD(SetVarCustData)(THIS_ UINT, REFGUID, VARIANT*) PURE;        
+	STDMETHOD(SetImplTypeCustData)(THIS_ UINT, REFGUID, VARIANT*) PURE;        
+	STDMETHOD(SetHelpStringContext)(THIS_ ULONG) PURE;        
+	STDMETHOD(SetFuncHelpStringContext)(THIS_ UINT, ULONG) PURE;        
+	STDMETHOD(SetVarHelpStringContext)(THIS_ UINT, ULONG) PURE;        
+	STDMETHOD(Invalidate)(THIS) PURE;       
+	STDMETHOD(SetName)(THIS_ LPOLESTR) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define ICreateTypeInfo2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ICreateTypeInfo2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ICreateTypeInfo2_Release(p) (p)->lpVtbl->Release(p)
+#define ICreateTypeInfo2_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
+#define ICreateTypeInfo2_SetTypeFlags(p,a) (p)->lpVtbl->SetTypeFlags(p,a)
+#define ICreateTypeInfo2_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
+#define ICreateTypeInfo2_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
+#define ICreateTypeInfo2_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
+#define ICreateTypeInfo2_AddRefTypeInfo(p,a,b) (p)->lpVtbl->AddRefTypeInfo(p,a,b)
+#define ICreateTypeInfo2_AddFuncDesc(p,a,b) (p)->lpVtbl->AddFuncDesc(p,a,b)
+#define ICreateTypeInfo2_AddImplType(p,a,b) (p)->lpVtbl->AddImplType(p,a,b)
+#define ICreateTypeInfo2_SetImplTypeFlags(p,a,b) (p)->lpVtbl->SetImplTypeFlags(p,a,b)
+#define ICreateTypeInfo2_SetAlignment(p,a) (p)->lpVtbl->SetAlignment(p,a)
+#define ICreateTypeInfo2_SetSchema(p,a) (p)->lpVtbl->SetSchema(p,a)
+#define ICreateTypeInfo2_AddVarDesc(p,a,b) (p)->lpVtbl->AddVarDesc(p,a,b)
+#define ICreateTypeInfo2_SetFuncAndParamNames(p,a,b,c) (p)->lpVtbl->SetFuncAndParamNames(p,a,b,c)
+#define ICreateTypeInfo2_SetVarName(p,a,b) (p)->lpVtbl->SetVarName(p,a,b)
+#define ICreateTypeInfo2_SetTypeDescAlias(p,a) (p)->lpVtbl->SetTypeDescAlias(p,a)
+#define ICreateTypeInfo2_DefineFuncAsDllEntry(p,a,b,c) (p)->lpVtbl->DefineFuncAsDllEntry(p,a,b,c)
+#define ICreateTypeInfo2_SetFuncDocString(p,a,b) (p)->lpVtbl->SetFuncDocString(p,a,b)
+#define ICreateTypeInfo2_SetVarDocString(p,a,b) (p)->lpVtbl->SetVarDocString(p,a,b)
+#define ICreateTypeInfo2_SetFuncHelpContext(p,a,b) (p)->lpVtbl->SetFuncHelpContext(p,a,b)
+#define ICreateTypeInfo2_SetVarHelpContext(p,a,b) (p)->lpVtbl->SetVarHelpContext(p,a,b)
+#define ICreateTypeInfo2_SetMops(p,a,b) (p)->lpVtbl->SetMops(p,a,b)
+#define ICreateTypeInfo2_SetTypeIdldesc(p,a) (p)->lpVtbl->SetTypeIdldesc(p,a)
+#define ICreateTypeInfo2_LayOut(p) (p)->lpVtbl->LayOut(p)
+#define ICreateTypeInfo2_DeleteFuncDesc(p,a) (p)->lpVtbl->DeleteFuncDesc(p,a)
+#define ICreateTypeInfo2_DeleteFuncDescByMemId(p,a,b) (p)->lpVtbl->DeleteFuncDescByMemId(p,a,b)
+#define ICreateTypeInfo2_DeleteVarDesc(p,a) (p)->lpVtbl->DeleteVarDesc(p,a)
+#define ICreateTypeInfo2_DeleteVarDescByMemId(p,a) (p)->lpVtbl->DeleteVarDescByMemId(p,a)
+#define ICreateTypeInfo2_DeleteImplType(p,a) (p)->lpVtbl->DeleteImplType(p,a)
+#define ICreateTypeInfo2_SetCustData(p,a,b) (p)->lpVtbl->SetCustData(p,a,b)
+#define ICreateTypeInfo2_SetFuncCustData(p,a,b,c) (p)->lpVtbl->SetFuncCustData(p,a,b,c)
+#define ICreateTypeInfo2_SetParamCustData(p,a,b,c,d) (p)->lpVtbl->SetParamCustData(p,a,b,c,d)
+#define ICreateTypeInfo2_SetVarCustData(p,a,b,c) (p)->lpVtbl->SetVarCustData(p,a,b,c)
+#define ICreateTypeInfo2_SetImplTypeCustData(p,a,b,c) (p)->lpVtbl->SetImplTypeCustData(p,a,b,c)
+#define ICreateTypeInfo2_SetHelpStringContext(p,a) (p)->lpVtbl->SetHelpStringContext(p,a)
+#define ICreateTypeInfo2_SetFuncHelpStringContext(p,a,b) (p)->lpVtbl->SetFuncHelpStringContext(p,a,b)
+#define ICreateTypeInfo2_SetVarHelpStringContext(p,a,b) (p)->lpVtbl->SetVarHelpStringContext(p,a,b)
+#define ICreateTypeInfo2_Invalidate(p) (p)->lpVtbl->Invalidate(p)
+#define ICreateTypeInfo2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#endif
+
+#define INTERFACE ICreateTypeLib
+DECLARE_INTERFACE_(ICreateTypeLib,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(CreateTypeInfo)(THIS_ LPOLESTR,TYPEKIND,ICreateTypeInfo**) PURE;
+	STDMETHOD(SetName)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetVersion)(THIS_ WORD,WORD) PURE;
+	STDMETHOD(SetGuid)(THIS_ REFGUID) PURE;
+	STDMETHOD(SetDocString)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetHelpFileName)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetHelpContext)(THIS_ DWORD) PURE;
+	STDMETHOD(SetLcid)(THIS_ LCID) PURE;
+	STDMETHOD(SetLibFlags)(THIS_ UINT) PURE;
+	STDMETHOD(SaveAllChanges)(THIS) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define ICreateTypeLib_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ICreateTypeLib_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ICreateTypeLib_Release(p) (p)->lpVtbl->Release(p)
+#define ICreateTypeLib_CreateTypeInfo(p,a,b,c) (p)->lpVtbl->CreateTypeInfo(p,a,b,c)
+#define ICreateTypeLib_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define ICreateTypeLib_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
+#define ICreateTypeLib_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
+#define ICreateTypeLib_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
+#define ICreateTypeLib_SetHelpFileName(p,a) (p)->lpVtbl->SetHelpFileName(p,a)
+#define ICreateTypeLib_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
+#define ICreateTypeLib_SetLcid(p,a) (p)->lpVtbl->SetLcid(p,a)
+#define ICreateTypeLib_SetLibFlags(p,a) (p)->lpVtbl->SetLibFlags(p,a)
+#define ICreateTypeLib_SaveAllChanges(p) (p)->lpVtbl->SaveAllChanges(p)
+#endif
+
+#define INTERFACE ICreateTypeLib2
+DECLARE_INTERFACE_(ICreateTypeLib2,IUnknown)
+{
+	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
+	STDMETHOD_(ULONG,Release)(THIS) PURE;
+	STDMETHOD(CreateTypeInfo)(THIS_ LPOLESTR,TYPEKIND,ICreateTypeInfo**) PURE;
+	STDMETHOD(SetName)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetVersion)(THIS_ WORD,WORD) PURE;
+	STDMETHOD(SetGuid)(THIS_ REFGUID) PURE;
+	STDMETHOD(SetDocString)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetHelpFileName)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetHelpContext)(THIS_ DWORD) PURE;
+	STDMETHOD(SetLcid)(THIS_ LCID) PURE;
+	STDMETHOD(SetLibFlags)(THIS_ UINT) PURE;
+	STDMETHOD(SaveAllChanges)(THIS) PURE;
+	STDMETHOD(DeleteTypeInfo)(THIS_ LPOLESTR) PURE;
+	STDMETHOD(SetCustData)(THIS_ REFGUID, VARIANT*) PURE;
+	STDMETHOD(SetHelpStringContext)(THIS_ ULONG) PURE;        
+	STDMETHOD(SetHelpStringDll)(THIS_ LPOLESTR) PURE;
+};
+#undef INTERFACE
+
+#ifdef COBJMACROS
+#define ICreateTypeLib2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define ICreateTypeLib2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define ICreateTypeLib2_Release(p) (p)->lpVtbl->Release(p)
+#define ICreateTypeLib2_CreateTypeInfo(p,a,b,c) (p)->lpVtbl->CreateTypeInfo(p,a,b,c)
+#define ICreateTypeLib2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
+#define ICreateTypeLib2_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
+#define ICreateTypeLib2_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
+#define ICreateTypeLib2_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
+#define ICreateTypeLib2_SetHelpFileName(p,a) (p)->lpVtbl->SetHelpFileName(p,a)
+#define ICreateTypeLib2_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
+#define ICreateTypeLib2_SetLcid(p,a) (p)->lpVtbl->SetLcid(p,a)
+#define ICreateTypeLib2_SetLibFlags(p,a) (p)->lpVtbl->SetLibFlags(p,a)
+#define ICreateTypeLib2_SaveAllChanges(p) (p)->lpVtbl->SaveAllChanges(p)
+#define ICreateTypeLib2_DeleteTypeInfo(p,a) (p)->lpVtbl->DeleteTypeInfo(p,a)
+#define ICreateTypeLib2_SetCustData(p,a,b) (p)->lpVtbl->SetCustData(p,a,b)
+#define ICreateTypeLib2_SetHelpStringContext(p,a) (p)->lpVtbl->SetHelpStringContext(p,a)
+#define ICreateTypeLib2_SetHelpStringDll(p,a) (p)->lpVtbl->SetHelpStringDll(p,a)
+#endif
+
 EXTERN_C const IID IID_IErrorInfo;
 #define INTERFACE IErrorInfo
 DECLARE_INTERFACE_(IErrorInfo, IUnknown)
@@ -765,6 +1108,75 @@
 };
 #undef INTERFACE
 
+unsigned long __RPC_USER BSTR_UserSize(unsigned long*,unsigned long,LPBSTR);
+unsigned char* __RPC_USER BSTR_UserMarshal(unsigned long*,unsigned char*,LPBSTR);
+unsigned char* __RPC_USER BSTR_UserUnmarshal(unsigned long*,unsigned char*,LPBSTR);
+void __RPC_USER BSTR_UserFree(unsigned long*,LPBSTR);
+unsigned long __RPC_USER CLEANLOCALSTORAGE_UserSize(unsigned long*,unsigned long,CLEANLOCALSTORAGE*);
+unsigned char* __RPC_USER CLEANLOCALSTORAGE_UserMarshal(unsigned long*,unsigned char*,CLEANLOCALSTORAGE*);
+unsigned char* __RPC_USER CLEANLOCALSTORAGE_UserUnmarshal(unsigned long*,unsigned char*,CLEANLOCALSTORAGE*);
+void __RPC_USER CLEANLOCALSTORAGE_UserFree(unsigned long*,CLEANLOCALSTORAGE*);
+unsigned long __RPC_USER VARIANT_UserSize(unsigned long*,unsigned long,LPVARIANT);
+unsigned char* __RPC_USER VARIANT_UserMarshal(unsigned long*,unsigned char*,LPVARIANT);
+unsigned char* __RPC_USER VARIANT_UserUnmarshal(unsigned long*,unsigned char*,LPVARIANT);
+void __RPC_USER VARIANT_UserFree(unsigned long*,LPVARIANT);
+HRESULT STDMETHODCALLTYPE IDispatch_Invoke_Proxy(LPDISPATCH,DISPID,REFIID,LCID,WORD,DISPPARAMS*,LPVARIANT,LPEXCEPINFO,LPUINT);
+HRESULT STDMETHODCALLTYPE IDispatch_Invoke_Stub(LPDISPATCH,DISPID,REFIID,LCID,DWORD,DISPPARAMS*,LPVARIANT,LPEXCEPINFO,LPUINT,UINT,LPUINT,LPVARIANTARG);
+HRESULT STDMETHODCALLTYPE IDispatch_RemoteInvoke_Proxy(LPDISPATCH,DISPID,REFIID,LCID,DWORD,DISPPARAMS*,LPVARIANT,LPEXCEPINFO,LPUINT,UINT,LPUINT,LPVARIANTARG);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Next_Proxy(LPENUMVARIANT,ULONG,LPVARIANT,PULONG);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_Next_Stub(LPENUMVARIANT,ULONG,LPVARIANT,PULONG);
+HRESULT STDMETHODCALLTYPE IEnumVARIANT_RemoteNext_Proxy(LPENUMVARIANT,ULONG,LPVARIANT,PULONG);
+HRESULT STDMETHODCALLTYPE ITypeComp_Bind_Proxy(LPTYPECOMP,LPOLESTR,ULONG,WORD,LPTYPEINFO*,DESCKIND*,BINDPTR*);
+HRESULT STDMETHODCALLTYPE ITypeComp_Bind_Stub(LPTYPECOMP,LPOLESTR,ULONG,WORD,LPTYPEINFO*,DESCKIND*,LPFUNCDESC*,LPVARDESC*,LPTYPECOMP*,CLEANLOCALSTORAGE*);
+HRESULT STDMETHODCALLTYPE ITypeComp_BindType_Proxy(LPTYPECOMP,LPOLESTR,ULONG,LPTYPEINFO*,LPTYPECOMP*);
+HRESULT STDMETHODCALLTYPE ITypeComp_BindType_Stub(LPTYPECOMP,LPOLESTR,ULONG,LPTYPEINFO*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetTypeAttr_Proxy(LPTYPEINFO,LPTYPEATTR*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetTypeAttr_Stub(LPTYPEINFO,LPTYPEATTR*,CLEANLOCALSTORAGE*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetFuncDesc_Proxy(LPTYPEINFO,UINT,FUNCDESC**);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetFuncDesc_Stub(LPTYPEINFO,UINT,LPFUNCDESC*,CLEANLOCALSTORAGE*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetVarDesc_Proxy(LPTYPEINFO,UINT,LPVARDESC*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetVarDesc_Stub(LPTYPEINFO,UINT,LPVARDESC*,CLEANLOCALSTORAGE*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetNames_Proxy(LPTYPEINFO,MEMBERID,LPBSTR,UINT,LPUINT);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetNames_Stub(LPTYPEINFO,MEMBERID,LPBSTR,UINT,LPUINT);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetIDsOfNames_Proxy(LPTYPEINFO,LPOLESTR*,UINT,MEMBERID*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetIDsOfNames_Stub(LPTYPEINFO);
+HRESULT STDMETHODCALLTYPE ITypeInfo_Invoke_Proxy(LPTYPEINFO,PVOID,MEMBERID,WORD,DISPPARAMS*,LPVARIANT,LPEXCEPINFO,LPUINT);
+HRESULT STDMETHODCALLTYPE ITypeInfo_Invoke_Stub(LPTYPEINFO);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetDocumentation_Proxy(LPTYPEINFO,MEMBERID,LPBSTR,LPBSTR,LPDWORD,LPBSTR);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetDocumentation_Stub(LPTYPEINFO,MEMBERID,DWORD,LPBSTR,LPBSTR,LPDWORD,LPBSTR);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetDllEntry_Proxy(LPTYPEINFO,MEMBERID,INVOKEKIND,LPBSTR,LPBSTR,LPWORD);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetDllEntry_Stub(LPTYPEINFO,MEMBERID,INVOKEKIND,DWORD,LPBSTR,LPBSTR,LPWORD);
+HRESULT STDMETHODCALLTYPE ITypeInfo_AddressOfMember_Proxy(LPTYPEINFO,MEMBERID,INVOKEKIND,PVOID*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_AddressOfMember_Stub(LPTYPEINFO);
+HRESULT STDMETHODCALLTYPE ITypeInfo_CreateInstance_Proxy(LPTYPEINFO,LPUNKNOWN,REFIID,PVOID*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_CreateInstance_Stub(LPTYPEINFO,REFIID,LPUNKNOWN*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetContainingTypeLib_Proxy(LPTYPEINFO,LPTYPELIB*,PUINT);
+HRESULT STDMETHODCALLTYPE ITypeInfo_GetContainingTypeLib_Stub(LPTYPEINFO,LPTYPELIB*,PUINT);
+void STDMETHODCALLTYPE ITypeInfo_ReleaseTypeAttr_Proxy(LPTYPEINFO,LPTYPEATTR);
+HRESULT STDMETHODCALLTYPE ITypeInfo_ReleaseTypeAttr_Stub(LPTYPEINFO);
+void STDMETHODCALLTYPE ITypeInfo_ReleaseFuncDesc_Proxy(LPTYPEINFO,LPFUNCDESC);
+HRESULT STDMETHODCALLTYPE ITypeInfo_ReleaseFuncDesc_Stub(LPTYPEINFO);
+void STDMETHODCALLTYPE ITypeInfo_ReleaseVarDesc_Proxy(LPTYPEINFO,VARDESC*);
+HRESULT STDMETHODCALLTYPE ITypeInfo_ReleaseVarDesc_Stub(LPTYPEINFO);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetDocumentation2_Proxy(LPTYPEINFO2,MEMBERID,LCID,LPBSTR,LPDWORD,LPBSTR);
+HRESULT STDMETHODCALLTYPE ITypeInfo2_GetDocumentation2_Stub(LPTYPEINFO2,MEMBERID,LCID,DWORD,LPBSTR,LPDWORD,LPBSTR);
+UINT STDMETHODCALLTYPE ITypeLib_GetTypeInfoCount_Proxy(LPTYPELIB);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetTypeInfoCount_Stub(LPTYPELIB,PUINT);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetLibAttr_Proxy(LPTYPELIB,LPTLIBATTR*);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetLibAttr_Stub(LPTYPELIB,LPTLIBATTR*,CLEANLOCALSTORAGE*);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetDocumentation_Proxy(LPTYPELIB,INT,LPBSTR,LPBSTR,LPDWORD,LPBSTR);
+HRESULT STDMETHODCALLTYPE ITypeLib_GetDocumentation_Stub(LPTYPELIB,INT,DWORD,LPBSTR,LPBSTR,LPDWORD,LPBSTR);
+HRESULT STDMETHODCALLTYPE ITypeLib_IsName_Proxy(LPTYPELIB,LPOLESTR,ULONG,LPBOOL);
+HRESULT STDMETHODCALLTYPE ITypeLib_IsName_Stub(LPTYPELIB,LPOLESTR,ULONG,LPBOOL,LPBSTR);
+HRESULT STDMETHODCALLTYPE ITypeLib_FindName_Proxy(LPTYPELIB,LPOLESTR,ULONG,LPTYPEINFO*,MEMBERID*,PUSHORT);
+HRESULT STDMETHODCALLTYPE ITypeLib_FindName_Stub(LPTYPELIB,LPOLESTR,ULONG,LPTYPEINFO*,MEMBERID*,PUSHORT,LPBSTR);
+void STDMETHODCALLTYPE ITypeLib_ReleaseTLibAttr_Proxy(LPTYPELIB,LPTLIBATTR);
+HRESULT STDMETHODCALLTYPE ITypeLib_ReleaseTLibAttr_Stub(LPTYPELIB);
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetLibStatistics_Proxy(LPTYPELIB2,PULONG,PULONG);
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetLibStatistics_Stub(LPTYPELIB2,PULONG,PULONG);
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetDocumentation2_Proxy(LPTYPELIB2,INT,LCID,LPBSTR,LPDWORD,LPBSTR);
+HRESULT STDMETHODCALLTYPE ITypeLib2_GetDocumentation2_Stub(LPTYPELIB2,INT,LCID,DWORD,LPBSTR,LPDWORD,LPBSTR);
+
 #ifdef __cplusplus
 }
 #endif

reactos/w32api/include
objidl.h 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- objidl.h	24 Apr 2004 21:35:24 -0000	1.3
+++ objidl.h	1 Dec 2004 20:06:15 -0000	1.4
@@ -796,11 +796,11 @@
 	STDMETHOD_(ULONG,Release)(THIS) PURE;
 	STDMETHOD(Connect)(THIS_ LPUNKNOWN) PURE;
 	STDMETHOD_(void,Disconnect)(THIS) PURE;
-	STDMETHOD(Invoke)(THIS_ RPCOLEMESSAGE*,LPRPCSTUBBUFFER) PURE;
+	STDMETHOD(Invoke)(THIS_ RPCOLEMESSAGE*,LPRPCCHANNELBUFFER) PURE;
 	STDMETHOD_(LPRPCSTUBBUFFER,IsIIDSupported)(THIS_ REFIID) PURE;
 	STDMETHOD_(ULONG,CountRefs)(THIS) PURE;
 	STDMETHOD(DebugServerQueryInterface)(THIS_ PVOID*) PURE;
-	STDMETHOD(DebugServerRelease)(THIS_ PVOID) PURE;
+	STDMETHOD_(VOID,DebugServerRelease)(THIS_ PVOID) PURE;
 };
 #undef INTERFACE
 

reactos/w32api/include
ocidl.h 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- ocidl.h	1 Mar 2004 22:57:20 -0000	1.3
+++ ocidl.h	1 Dec 2004 20:06:15 -0000	1.4
@@ -217,6 +217,14 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define IPropertyBag_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IPropertyBag_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IPropertyBag_Release(p) (p)->lpVtbl->Release(p)
+#define IPropertyBag_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c)
+#define IPropertyBag_Write(p,a,b) (p)->lpVtbl->Write(p,a,b)
+#endif
+
 EXTERN_C const IID IID_IPropertyBag2;
 #define INTERFACE IPropertyBag2
 DECLARE_INTERFACE_(IPropertyBag2,IUnknown)
@@ -232,6 +240,17 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define IPropertyBag2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IPropertyBag2_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IPropertyBag2_Release(p) (p)->lpVtbl->Release(p)
+#define IPropertyBag2_Read(p,a,b,c) (p)->lpVtbl->Read(p,a,b,c)
+#define IPropertyBag2_Write(p,a,b) (p)->lpVtbl->Write(p,a,b)
+#define IPropertyBag2_CountProperties(p,a) (p)->lpVtbl->CountProperties(p,a)
+#define IPropertyBag2_GetPropertyInfo(p,a,b,c,d) (p)->lpVtbl->GetPropertyInfo(p,a,b,c,d)
+#define IPropertyBag2_LoadObject(p,a,b,c,d) (p)->lpVtbl->LoadObject(p,a,b,c,d)
+#endif
+
 EXTERN_C const IID IID_IPersistPropertyBag;
 #define INTERFACE IPersistPropertyBag
 DECLARE_INTERFACE_(IPersistPropertyBag,IPersist)
@@ -572,6 +591,36 @@
 };
 #undef INTERFACE
 
+#ifdef COBJMACROS
+#define IFont_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IFont_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IFont_Release(p) (p)->lpVtbl->Release(p)
+#define IFont_get_Name(p,a) (p)->lpVtbl->get_Name(p,a)
+#define IFont_put_Name(p,a) (p)->lpVtbl->put_Name(p,a)
+#define IFont_get_Size(p,a) (p)->lpVtbl->get_Size(p,a)
+#define IFont_put_Size(p,a) (p)->lpVtbl->put_Size(p,a)
+#define IFont_get_Bold(p,a) (p)->lpVtbl->get_Bold(p,a)
+#define IFont_put_Bold(p,a) (p)->lpVtbl->put_Bold(p,a)
+#define IFont_get_Italic(p,a) (p)->lpVtbl->get_Italic(p,a)
+#define IFont_put_Italic(p,a) (p)->lpVtbl->put_Italic(p,a)
+#define IFont_get_Underline(p,a) (p)->lpVtbl->get_Underline(p,a)
+#define IFont_put_Underline(p,a) (p)->lpVtbl->put_Underline(p,a)
+#define IFont_get_Strikethrough(p,a) (p)->lpVtbl->get_Strikethrough(p,a)
+#define IFont_put_Strikethrough(p,a) (p)->lpVtbl->put_Strikethrough(p,a)
+#define IFont_get_Weight(p,a) (p)->lpVtbl->get_Weight(p,a)
+#define IFont_put_Weight(p,a) (p)->lpVtbl->put_Weight(p,a)
+#define IFont_get_Charset(p,a) (p)->lpVtbl->get_Charset(p,a)
+#define IFont_put_Charset(p,a) (p)->lpVtbl->put_Charset(p,a)
+#define IFont_get_hFont(p,a) (p)->lpVtbl->get_hFont(p,a)
+#define IFont_Clone(p,a) (p)->lpVtbl->Clone(p,a)
+#define IFont_IsEqual(p,a) (p)->lpVtbl->IsEqual(p,a)
+#define IFont_SetRatio(p,a,b) (p)->lpVtbl->SetRatio(p,a,b)
+#define IFont_QueryTextMetrics(p,a) (p)->lpVtbl->QueryTextMetrics(p,a)
+#define IFont_AddRefHfont(p,a) (p)->lpVtbl->AddRefHfont(p,a)
+#define IFont_ReleaseHfont(p,a) (p)->lpVtbl->ReleaseHfont(p,a)
+#define IFont_SetHdc(p,a) (p)->lpVtbl->SetHdc(p,a)
+#endif
+
 EXTERN_C const IID IID_IFontDisp;
 #define INTERFACE IFontDisp
 DECLARE_INTERFACE_(IFontDisp,IDispatch)

reactos/w32api/include
oleauto.h 1.11 -> 1.12
diff -u -r1.11 -r1.12
--- oleauto.h	2 Mar 2004 10:25:59 -0000	1.11
+++ oleauto.h	1 Dec 2004 20:06:15 -0000	1.12
@@ -154,6 +154,8 @@
 
 #include <oaidl.h>
 
+EXTERN_C const IID IID_StdOle;
+
 typedef enum tagREGKIND {
 	REGKIND_DEFAULT,
 	REGKIND_REGISTER,

reactos/w32api/include
rpc.h 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- rpc.h	17 Apr 2004 07:41:26 -0000	1.2
+++ rpc.h	1 Dec 2004 20:06:15 -0000	1.3
@@ -54,6 +54,15 @@
 #define RpcEndFinally }
 #define RpcExceptionCode() GetExceptionCode()
 #define RpcAbnormalTermination() AbnormalTermination()
+#else
+#define RpcTryExcept if (1) {
+#define RpcExcept(x) } else {
+#define RpcEndExcept }
+#define RpcTryFinally if (1) {
+#define RpcFinally } else {
+#define RpcEndFinally }
+#define RpcExceptionCode() 0
+#define RpcAbnormalTermination() AbnormalTermination()
 #endif /* 0 */
 
 RPC_STATUS RPC_ENTRY RpcImpersonateClient(RPC_BINDING_HANDLE);

reactos/w32api/include
rpcndr.h 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- rpcndr.h	19 Sep 2004 09:11:12 -0000	1.3
+++ rpcndr.h	1 Dec 2004 20:06:15 -0000	1.4
@@ -12,6 +12,9 @@
 extern "C" {
 #endif
 #include <objfwd.h>
+#define TARGET_IS_NT50_OR_LATER 1
+#define TARGET_IS_NT40_OR_LATER 1
+#define TARGET_IS_NT351_OR_WIN95_OR_LATER 1
 #define DECLSPEC_UUID(x)
 #define MIDL_INTERFACE(x) struct
 #define NDR_CHAR_REP_MASK (unsigned long)0xFL

reactos/w32api/include
rpcproxy.h 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- rpcproxy.h	17 Apr 2004 07:41:26 -0000	1.2
+++ rpcproxy.h	1 Dec 2004 20:06:15 -0000	1.3
@@ -20,6 +20,10 @@
 #include <rpcndr.h>
 #include <string.h>
 
+#ifndef __RPCPROXY_H_VERSION__
+#define __RPCPROXY_H_VERSION__ 475
+#endif
+
 #define CStdStubBuffer_METHODS CStdStubBuffer_QueryInterface,CStdStubBuffer_AddRef,\
 CStdStubBuffer_Release,CStdStubBuffer_Connect,CStdStubBuffer_Disconnect,CStdStubBuffer_Invoke,\
 CStdStubBuffer_IsIIDSupported,CStdStubBuffer_CountRefs,CStdStubBuffer_DebugServerQueryInterface,\
@@ -98,6 +102,13 @@
 
 #define DLLDATA_STANDARD_ROUTINES DLLDATA_ROUTINES( (const ProxyFileInfo**) pProxyFileList, &CLSID_PSFactoryBuffer)
 
+#define CINTERFACE_PROXY_VTABLE(n) \
+	struct \
+	{ \
+		CInterfaceProxyHeader header; \
+		void *Vtbl[n]; \
+	}
+
 struct tagCInterfaceStubVtbl;
 struct tagCInterfaceProxyVtbl;
 typedef struct tagCInterfaceStubVtbl *PCInterfaceStubVtblList;
CVSspam 0.2.8