16 modified files
- FIXME("Failed to deserialize param %s, hres %lx\n",relaystr(names[i+1]),hres);
- FIXME("Could not get typeinfo of hreftype %lx for VT_USERDEFINED, "
- FIXME("Failed to query IDispatch interface from %s while "
- FIXME("vt 0x%x -> TKIND_INTERFACE(%s) unhandled\n",
- FIXME("TKIND_DISPATCH unhandled for target vt 0x%x.\n",V_VT(arg));
- FIXME("Should not use VariantChangeType here."
- FIXME: Documentation says that we do this when parameter is left unspecified.
- FIXME("PARAMFLAG_FHASDEFAULT flag not supported\n");
- FIXME("PARAMFLAG_FHASDEFAULT flag not supported\n");
- FIXME("(%p,%p), hack!\n", iface, pTDescAlias);
- FIXME("Should be decoding our copy of the name over szNameBuf.\n");
- FIXME - Should be using a per-thread IMalloc */
reactos/include/wine
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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