mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 09:11:42 +00:00
- Get full OLEAUT32 to compile.
svn path=/trunk/; revision=11893
This commit is contained in:
parent
18ef45edfe
commit
b1ac258a6d
16 changed files with 1379 additions and 459 deletions
|
@ -813,11 +813,11 @@ DECLARE_INTERFACE_(IRpcStubBuffer,IUnknown)
|
|||
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
|
||||
|
||||
|
|
|
@ -15,22 +15,21 @@ C_SRCS = \
|
|||
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
|
||||
|
|
|
@ -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 @@ void __RPC_STUB IDispatch_GetIDsOfNames_Stub(
|
|||
LCID lcid;
|
||||
DISPID __RPC_FAR *rgDispId;
|
||||
LPOLESTR __RPC_FAR *rgszNames;
|
||||
REFIID riid = 0;
|
||||
IID* riid = 0;
|
||||
|
||||
NdrStubInitialize(
|
||||
_pRpcMessage,
|
||||
|
@ -726,7 +735,7 @@ void __RPC_STUB IDispatch_RemoteInvoke_Stub(
|
|||
VARIANT __RPC_FAR *pVarResult;
|
||||
VARIANTARG __RPC_FAR *rgVarRef;
|
||||
UINT __RPC_FAR *rgVarRefIdx;
|
||||
REFIID riid = 0;
|
||||
IID* riid = 0;
|
||||
|
||||
NdrStubInitialize(
|
||||
_pRpcMessage,
|
||||
|
@ -4039,7 +4048,7 @@ void __RPC_STUB ITypeInfo_RemoteCreateInstance_Stub(
|
|||
HRESULT _RetVal;
|
||||
MIDL_STUB_MESSAGE _StubMsg;
|
||||
IUnknown __RPC_FAR *__RPC_FAR *ppvObj;
|
||||
REFIID riid = 0;
|
||||
IID* riid = 0;
|
||||
|
||||
NdrStubInitialize(
|
||||
_pRpcMessage,
|
||||
|
@ -10751,7 +10760,7 @@ void __RPC_STUB ISupportErrorInfo_InterfaceSupportsErrorInfo_Stub(
|
|||
{
|
||||
HRESULT _RetVal;
|
||||
MIDL_STUB_MESSAGE _StubMsg;
|
||||
REFIID riid = 0;
|
||||
IID* riid = 0;
|
||||
|
||||
NdrStubInitialize(
|
||||
_pRpcMessage,
|
||||
|
@ -10931,7 +10940,7 @@ void __RPC_STUB ITypeFactory_CreateFromTypeInfo_Stub(
|
|||
MIDL_STUB_MESSAGE _StubMsg;
|
||||
ITypeInfo __RPC_FAR *pTypeInfo;
|
||||
IUnknown __RPC_FAR *__RPC_FAR *ppv;
|
||||
REFIID riid = 0;
|
||||
IID* riid = 0;
|
||||
|
||||
NdrStubInitialize(
|
||||
_pRpcMessage,
|
||||
|
|
|
@ -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 @@ struct OLEFontImpl
|
|||
* 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 @@ struct OLEFontImpl
|
|||
* 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 @@ static HRESULT WINAPI OLEFontImpl_FindConnectionPoint(
|
|||
/*
|
||||
* 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 @@ static ICOM_VTABLE(IFont) OLEFontImpl_VTable =
|
|||
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 @@ static ICOM_VTABLE(IDispatch) OLEFontImpl_IDispatch_VTable =
|
|||
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 @@ static ICOM_VTABLE(IPersistStream) OLEFontImpl_IPersistStream_VTable =
|
|||
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 @@ static ICOM_VTABLE(IConnectionPointContainer)
|
|||
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 @@ HRESULT WINAPI OleCreateFontIndirect(
|
|||
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 @@ HRESULT WINAPI OLEFontImpl_QueryInterface(
|
|||
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 @@ HRESULT WINAPI OLEFontImpl_QueryInterface(
|
|||
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_AddRef(
|
|||
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);
|
||||
if (ret==0) OLEFontImpl_Destroy(this);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return this->ref;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
|
@ -575,7 +566,7 @@ static HRESULT WINAPI OLEFontImpl_get_Name(
|
|||
IFont* iface,
|
||||
BSTR* pname)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, pname);
|
||||
/*
|
||||
* Sanity check.
|
||||
|
@ -600,7 +591,7 @@ static HRESULT WINAPI OLEFontImpl_put_Name(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_Size(
|
|||
IFont* iface,
|
||||
CY* psize)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, psize);
|
||||
|
||||
/*
|
||||
|
@ -659,7 +650,7 @@ static HRESULT WINAPI OLEFontImpl_put_Size(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_Bold(
|
|||
IFont* iface,
|
||||
BOOL* pbold)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, pbold);
|
||||
/*
|
||||
* Sanity check
|
||||
|
@ -699,7 +690,7 @@ static HRESULT WINAPI OLEFontImpl_put_Bold(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_Italic(
|
|||
IFont* iface,
|
||||
BOOL* pitalic)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, pitalic);
|
||||
/*
|
||||
* Sanity check
|
||||
|
@ -738,7 +729,7 @@ static HRESULT WINAPI OLEFontImpl_put_Italic(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_Underline(
|
|||
IFont* iface,
|
||||
BOOL* punderline)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, punderline);
|
||||
|
||||
/*
|
||||
|
@ -779,7 +770,7 @@ static HRESULT WINAPI OLEFontImpl_put_Underline(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_Strikethrough(
|
|||
IFont* iface,
|
||||
BOOL* pstrikethrough)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, pstrikethrough);
|
||||
|
||||
/*
|
||||
|
@ -820,7 +811,7 @@ static HRESULT WINAPI OLEFontImpl_put_Strikethrough(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_Weight(
|
|||
IFont* iface,
|
||||
short* pweight)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, pweight);
|
||||
|
||||
/*
|
||||
|
@ -861,7 +852,7 @@ static HRESULT WINAPI OLEFontImpl_put_Weight(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_Charset(
|
|||
IFont* iface,
|
||||
short* pcharset)
|
||||
{
|
||||
_ICOM_THIS(OLEFontImpl, iface);
|
||||
OLEFontImpl *this = (OLEFontImpl *)iface;
|
||||
TRACE("(%p)->(%p)\n", this, pcharset);
|
||||
|
||||
/*
|
||||
|
@ -902,7 +893,7 @@ static HRESULT WINAPI OLEFontImpl_put_Charset(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_get_hFont(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_Clone(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_SetRatio(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_AddRefHfont(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_ReleaseHfont(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_SetHdc(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_GetTypeInfo(
|
|||
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_InitNew(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Save(
|
|||
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 @@ static HRESULT WINAPI OLEFontImpl_IPersistStreamInit_InitNew(
|
|||
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 @@ static ICOM_VTABLE(IPersistStreamInit) OLEFontImpl_IPersistStreamInit_VTable =
|
|||
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 @@ SFCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|||
|
||||
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_CreateInstance(
|
|||
}
|
||||
|
||||
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,
|
||||
|
|
|
@ -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 @@ static const WCHAR ppvObjectW[] = {'p','p','v','O','b','j','e','c','t',0};
|
|||
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 @@ typedef struct _marshal_state {
|
|||
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 @@ static int _nroffuncs(ITypeInfo *tinfo) {
|
|||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
#ifdef __i386__
|
||||
|
||||
#include "pshpack1.h"
|
||||
|
||||
typedef struct _TMAsmProxy {
|
||||
|
@ -289,74 +304,99 @@ typedef struct _TMAsmProxy {
|
|||
|
||||
#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 @@ static ICOM_VTABLE(IRpcProxyBuffer) tmproxyvtable = {
|
|||
};
|
||||
|
||||
/* 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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
}
|
||||
/* 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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_param(
|
|||
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 @@ serialize_LPVOID_ptr(
|
|||
BOOL dealloc,
|
||||
TYPEDESC *tdesc,
|
||||
DWORD *arg,
|
||||
marshal_state *buf
|
||||
) {
|
||||
marshal_state *buf)
|
||||
{
|
||||
HRESULT hres;
|
||||
DWORD cookie;
|
||||
|
||||
|
@ -626,11 +666,11 @@ serialize_LPVOID_ptr(
|
|||
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 @@ serialize_DISPPARAM_ptr(
|
|||
BOOL dealloc,
|
||||
TYPEDESC *tdesc,
|
||||
DWORD *arg,
|
||||
marshal_state *buf
|
||||
) {
|
||||
marshal_state *buf)
|
||||
{
|
||||
DWORD cookie;
|
||||
HRESULT hres;
|
||||
DISPPARAMS *disp;
|
||||
|
@ -668,7 +708,7 @@ serialize_DISPPARAM_ptr(
|
|||
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 @@ serialize_DISPPARAM_ptr(
|
|||
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 @@ serialize_DISPPARAM_ptr(
|
|||
buf
|
||||
);
|
||||
if (debugout && (i<disp->cArgs-1))
|
||||
MESSAGE(",");
|
||||
TRACE_(olerelay)(",");
|
||||
}
|
||||
if (dealloc)
|
||||
HeapFree(GetProcessHeap(),0,disp->rgvarg);
|
||||
|
@ -701,7 +741,7 @@ serialize_DISPPARAM_ptr(
|
|||
if (hres)
|
||||
return hres;
|
||||
}
|
||||
if (debugout) MESSAGE("}{");
|
||||
if (debugout) TRACE_(olerelay)("}{");
|
||||
for (i=0;i<disp->cNamedArgs;i++) {
|
||||
TYPEDESC vtdesc;
|
||||
|
||||
|
@ -716,9 +756,9 @@ serialize_DISPPARAM_ptr(
|
|||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
}
|
||||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
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 @@ deserialize_param(
|
|||
(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 @@ deserialize_LPVOID_ptr(
|
|||
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 @@ deserialize_LPVOID_ptr(
|
|||
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 @@ deserialize_DISPPARAM_ptr(
|
|||
BOOL alloc,
|
||||
TYPEDESC *tdesc,
|
||||
DWORD *arg,
|
||||
marshal_state *buf
|
||||
) {
|
||||
marshal_state *buf)
|
||||
{
|
||||
DWORD cookie;
|
||||
DISPPARAMS *disps;
|
||||
HRESULT hres;
|
||||
|
@ -1011,7 +1051,7 @@ deserialize_DISPPARAM_ptr(
|
|||
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 @@ deserialize_DISPPARAM_ptr(
|
|||
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 @@ deserialize_DISPPARAM_ptr(
|
|||
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 @@ deserialize_DISPPARAM_ptr(
|
|||
(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 @@ _get_funcdesc(
|
|||
}
|
||||
|
||||
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 @@ xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */) {
|
|||
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 @@ xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */) {
|
|||
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 @@ xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */) {
|
|||
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 @@ xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */) {
|
|||
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 @@ xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */) {
|
|||
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 @@ xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */) {
|
|||
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 @@ PSFacBuf_CreateProxy(
|
|||
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 @@ PSFacBuf_CreateProxy(
|
|||
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 @@ PSFacBuf_CreateProxy(
|
|||
}
|
||||
|
||||
typedef struct _TMStubImpl {
|
||||
ICOM_VTABLE(IRpcStubBuffer) *lpvtbl;
|
||||
DWORD ref;
|
||||
IRpcStubBufferVtbl *lpvtbl;
|
||||
ULONG ref;
|
||||
|
||||
LPUNKNOWN pUnk;
|
||||
ITypeInfo *tinfo;
|
||||
|
@ -1427,7 +1484,8 @@ typedef struct _TMStubImpl {
|
|||
} 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 @@ TMStubImpl_QueryInterface(LPRPCSTUBBUFFER iface, REFIID riid, LPVOID *ppv) {
|
|||
}
|
||||
|
||||
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 @@ TMStubImpl_Connect(LPRPCSTUBBUFFER iface, LPUNKNOWN pUnkServer) {
|
|||
}
|
||||
|
||||
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 @@ TMStubImpl_Disconnect(LPRPCSTUBBUFFER iface) {
|
|||
|
||||
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 @@ TMStubImpl_Invoke(
|
|||
);
|
||||
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 @@ TMStubImpl_IsIIDSupported(LPRPCSTUBBUFFER iface, REFIID riid) {
|
|||
|
||||
static ULONG WINAPI
|
||||
TMStubImpl_CountRefs(LPRPCSTUBBUFFER iface) {
|
||||
ICOM_THIS(TMStubImpl,iface);
|
||||
TMStubImpl *This = (TMStubImpl *)iface;
|
||||
|
||||
return This->ref; /*FIXME? */
|
||||
}
|
||||
|
@ -1680,8 +1752,7 @@ TMStubImpl_DebugServerRelease(LPRPCSTUBBUFFER iface, LPVOID ppv) {
|
|||
return;
|
||||
}
|
||||
|
||||
ICOM_VTABLE(IRpcStubBuffer) tmstubvtbl = {
|
||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||
IRpcStubBufferVtbl tmstubvtbl = {
|
||||
TMStubImpl_QueryInterface,
|
||||
TMStubImpl_AddRef,
|
||||
TMStubImpl_Release,
|
||||
|
@ -1709,7 +1780,7 @@ PSFacBuf_CreateStub(
|
|||
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 @@ PSFacBuf_CreateStub(
|
|||
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 @@ static ICOM_VTABLE(IPSFactoryBuffer) psfacbufvtbl = {
|
|||
};
|
||||
|
||||
/* This is the whole PSFactoryBuffer object, just the vtableptr */
|
||||
static ICOM_VTABLE(IPSFactoryBuffer) *lppsfac = &psfacbufvtbl;
|
||||
static IPSFactoryBufferVtbl *lppsfac = &psfacbufvtbl;
|
||||
|
||||
/***********************************************************************
|
||||
* DllGetClassObject [OLE32.63]
|
||||
|
|
|
@ -308,7 +308,7 @@ HRESULT WINAPI LoadTypeLibEx(
|
|||
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 @@ HRESULT WINAPI LoadTypeLibEx(
|
|||
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 @@ typedef struct tagTLBImpLib
|
|||
/* 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 @@ typedef struct tagITypeLibImpl
|
|||
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 @@ typedef struct tagTLBImplType
|
|||
/* 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 @@ typedef struct tagITypeInfoImpl
|
|||
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 @@ static void dump_TypeDesc(TYPEDESC *pTD,char *szVarType) {
|
|||
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 @@ void dump_FUNCDESC(FUNCDESC *funcdesc) {
|
|||
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 @@ static void MSFT_ReadValue( VARIANT * pVar, int offset, TLBContext *pcx )
|
|||
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 @@ static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength)
|
|||
{
|
||||
*ppTI = MSFT_DoTypeInfo(&cx, i, pTypeLibImpl);
|
||||
|
||||
ITypeInfo_AddRef((ITypeInfo*) *ppTI);
|
||||
ppTI = &((*ppTI)->next);
|
||||
(pTypeLibImpl->TypeInfoCount)++;
|
||||
}
|
||||
|
@ -3369,7 +3371,7 @@ static HRESULT WINAPI ITypeLib2_fnQueryInterface(
|
|||
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 HRESULT WINAPI ITypeLib2_fnQueryInterface(
|
|||
*/
|
||||
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_fnAddRef( ITypeLib2 *iface)
|
|||
*/
|
||||
static ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface)
|
||||
{
|
||||
ICOM_THIS( ITypeLibImpl, iface);
|
||||
ITypeLibImpl *This = (ITypeLibImpl *)iface;
|
||||
|
||||
--(This->ref);
|
||||
|
||||
|
@ -3464,7 +3466,7 @@ static ULONG WINAPI ITypeLib2_fnRelease( ITypeLib2 *iface)
|
|||
*/
|
||||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfo(
|
|||
{
|
||||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoType(
|
|||
UINT index,
|
||||
TYPEKIND *pTKind)
|
||||
{
|
||||
ICOM_THIS( ITypeLibImpl, iface);
|
||||
ITypeLibImpl *This = (ITypeLibImpl *)iface;
|
||||
int i;
|
||||
ITypeInfoImpl *pTInfo = This->pTypeInfo;
|
||||
|
||||
|
@ -3549,7 +3551,7 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoOfGuid(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetLibAttr(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeComp(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetDocumentation(
|
|||
DWORD *pdwHelpContext,
|
||||
BSTR *pBstrHelpFile)
|
||||
{
|
||||
ICOM_THIS( ITypeLibImpl, iface);
|
||||
ITypeLibImpl *This = (ITypeLibImpl *)iface;
|
||||
|
||||
HRESULT result = E_INVALIDARG;
|
||||
|
||||
|
@ -3712,7 +3714,7 @@ static HRESULT WINAPI ITypeLib2_fnIsName(
|
|||
ULONG lHashVal,
|
||||
BOOL *pfName)
|
||||
{
|
||||
ICOM_THIS( ITypeLibImpl, iface);
|
||||
ITypeLibImpl *This = (ITypeLibImpl *)iface;
|
||||
ITypeInfoImpl *pTInfo;
|
||||
TLBFuncDesc *pFInfo;
|
||||
TLBVarDesc *pVInfo;
|
||||
|
@ -3758,7 +3760,7 @@ static HRESULT WINAPI ITypeLib2_fnFindName(
|
|||
MEMBERID *rgMemId,
|
||||
UINT16 *pcFound)
|
||||
{
|
||||
ICOM_THIS( ITypeLibImpl, iface);
|
||||
ITypeLibImpl *This = (ITypeLibImpl *)iface;
|
||||
ITypeInfoImpl *pTInfo;
|
||||
TLBFuncDesc *pFInfo;
|
||||
TLBVarDesc *pVInfo;
|
||||
|
@ -3799,7 +3801,7 @@ static VOID WINAPI ITypeLib2_fnReleaseTLibAttr(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetCustData(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetLibStatistics(
|
|||
ULONG *pcUniqueNames,
|
||||
ULONG *pcchUniqueNames)
|
||||
{
|
||||
ICOM_THIS( ITypeLibImpl, iface);
|
||||
ITypeLibImpl *This = (ITypeLibImpl *)iface;
|
||||
|
||||
FIXME("(%p): stub!\n", This);
|
||||
|
||||
|
@ -3868,7 +3870,7 @@ static HRESULT WINAPI ITypeLib2_fnGetDocumentation2(
|
|||
DWORD *pdwHelpStringContext,
|
||||
BSTR *pbstrHelpStringDll)
|
||||
{
|
||||
ICOM_THIS( ITypeLibImpl, iface);
|
||||
ITypeLibImpl *This = (ITypeLibImpl *)iface;
|
||||
HRESULT result;
|
||||
ITypeInfo *pTInfo;
|
||||
|
||||
|
@ -3929,7 +3931,7 @@ static HRESULT WINAPI ITypeLib2_fnGetAllCustData(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetAllCustData(
|
|||
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 @@ static HRESULT WINAPI ITypeLibComp_fnBindType(
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static ICOM_VTABLE(ITypeComp) tlbtcvt =
|
||||
static ITypeCompVtbl tlbtcvt =
|
||||
{
|
||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||
|
||||
ITypeLibComp_fnQueryInterface,
|
||||
ITypeLibComp_fnAddRef,
|
||||
|
@ -4050,7 +4050,7 @@ static HRESULT WINAPI ITypeInfo_fnQueryInterface(
|
|||
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 HRESULT WINAPI ITypeInfo_fnQueryInterface(
|
|||
*/
|
||||
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 @@ static ULONG WINAPI ITypeInfo_fnAddRef( ITypeInfo2 *iface)
|
|||
|
||||
/* 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 ULONG WINAPI ITypeInfo_fnRelease( ITypeInfo2 *iface)
|
|||
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_fnGetTypeAttr( ITypeInfo2 *iface,
|
|||
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_fnGetTypeComp( ITypeInfo2 *iface,
|
|||
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_fnGetFuncDesc( ITypeInfo2 *iface, UINT index,
|
|||
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_fnGetVarDesc( ITypeInfo2 *iface, UINT index,
|
|||
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 @@ static HRESULT WINAPI ITypeInfo_fnGetRefTypeOfImplType(
|
|||
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_fnGetRefTypeOfImplType(
|
|||
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_fnGetImplTypeFlags( ITypeInfo2 *iface,
|
|||
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 @@ _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) {
|
|||
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 @@ _copy_arg( ITypeInfo2 *tinfo, TYPEDESC *tdesc,
|
|||
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 @@ _copy_arg( ITypeInfo2 *tinfo, TYPEDESC *tdesc,
|
|||
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 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
|
|||
EXCEPINFO *pExcepInfo,
|
||||
UINT *pArgErr)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
TLBFuncDesc * pFDesc;
|
||||
TLBVarDesc * pVDesc;
|
||||
int i;
|
||||
|
@ -4682,7 +4715,8 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
|
|||
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 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
|
|||
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 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
|
|||
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 @@ static HRESULT WINAPI ITypeInfo_fnGetDocumentation( ITypeInfo2 *iface,
|
|||
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 @@ static HRESULT WINAPI ITypeInfo_fnGetDllEntry( ITypeInfo2 *iface, MEMBERID memid
|
|||
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 @@ static HRESULT WINAPI ITypeInfo_fnGetDllEntry( ITypeInfo2 *iface, MEMBERID memid
|
|||
|
||||
/* 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 @@ static HRESULT WINAPI ITypeInfo_fnGetRefTypeInfo(
|
|||
HREFTYPE hRefType,
|
||||
ITypeInfo **ppTInfo)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
HRESULT result = E_FAIL;
|
||||
|
||||
|
||||
|
@ -5052,7 +5118,7 @@ static HRESULT WINAPI ITypeInfo_fnGetRefTypeInfo(
|
|||
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_fnAddressOfMember( ITypeInfo2 *iface,
|
|||
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_fnCreateInstance( ITypeInfo2 *iface,
|
|||
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_fnGetMops( ITypeInfo2 *iface, MEMBERID memid,
|
|||
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 HRESULT WINAPI ITypeInfo_fnGetContainingTypeLib( ITypeInfo2 *iface,
|
|||
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 @@ static void WINAPI ITypeInfo_fnReleaseFuncDesc(
|
|||
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_fnReleaseFuncDesc(
|
|||
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 void WINAPI ITypeInfo_fnReleaseVarDesc( ITypeInfo2 *iface,
|
|||
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_fnGetTypeKind( ITypeInfo2 * iface,
|
|||
*/
|
||||
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_fnGetTypeFlags( ITypeInfo2 *iface, ULONG *pType
|
|||
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_fnGetFuncIndexOfMemId( ITypeInfo2 * iface,
|
|||
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 @@ static HRESULT WINAPI ITypeInfo2_fnGetCustData(
|
|||
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 @@ static HRESULT WINAPI ITypeInfo2_fnGetFuncCustData(
|
|||
REFGUID guid,
|
||||
VARIANT *pVarVal)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
TLBCustData *pCData=NULL;
|
||||
TLBFuncDesc * pFDesc;
|
||||
int i;
|
||||
|
@ -5294,7 +5360,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetParamCustData(
|
|||
REFGUID guid,
|
||||
VARIANT *pVarVal)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
TLBCustData *pCData=NULL;
|
||||
TLBFuncDesc * pFDesc;
|
||||
int i;
|
||||
|
@ -5327,7 +5393,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetVarCustData(
|
|||
REFGUID guid,
|
||||
VARIANT *pVarVal)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
TLBCustData *pCData=NULL;
|
||||
TLBVarDesc * pVDesc;
|
||||
int i;
|
||||
|
@ -5363,7 +5429,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetImplTypeCustData(
|
|||
REFGUID guid,
|
||||
VARIANT *pVarVal)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
TLBCustData *pCData=NULL;
|
||||
TLBImplType * pRDesc;
|
||||
int i;
|
||||
|
@ -5404,7 +5470,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetDocumentation2(
|
|||
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 @@ static HRESULT WINAPI ITypeInfo2_fnGetAllCustData(
|
|||
ITypeInfo2 * iface,
|
||||
CUSTDATA *pCustData)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
TLBCustData *pCData;
|
||||
int i;
|
||||
|
||||
|
@ -5490,7 +5556,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetAllFuncCustData(
|
|||
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_fnGetAllFuncCustData(
|
|||
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_fnGetAllParamCustData( ITypeInfo2 * iface,
|
|||
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 @@ static HRESULT WINAPI ITypeInfo2_fnGetAllImplTypeCustData(
|
|||
UINT index,
|
||||
CUSTDATA *pCustData)
|
||||
{
|
||||
ICOM_THIS( ITypeInfoImpl, iface);
|
||||
ITypeInfoImpl *This = (ITypeInfoImpl *)iface;
|
||||
TLBCustData *pCData;
|
||||
TLBImplType * pRDesc;
|
||||
int i;
|
||||
|
@ -5629,9 +5695,8 @@ static HRESULT WINAPI ITypeInfo2_fnGetAllImplTypeCustData(
|
|||
return TYPE_E_ELEMENTNOTFOUND;
|
||||
}
|
||||
|
||||
static ICOM_VTABLE(ITypeInfo2) tinfvt =
|
||||
static ITypeInfo2Vtbl tinfvt =
|
||||
{
|
||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||
|
||||
ITypeInfo_fnQueryInterface,
|
||||
ITypeInfo_fnAddRef,
|
||||
|
@ -5784,9 +5849,8 @@ static HRESULT WINAPI ITypeComp_fnBindType(
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static ICOM_VTABLE(ITypeComp) tcompvt =
|
||||
static ITypeCompVtbl tcompvt =
|
||||
{
|
||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||
|
||||
ITypeComp_fnQueryInterface,
|
||||
ITypeComp_fnAddRef,
|
||||
|
|
|
@ -76,9 +76,9 @@ typedef struct tagMSFT_Header {
|
|||
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 @@ typedef struct {
|
|||
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 @@ typedef struct {
|
|||
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 @@ typedef struct {
|
|||
/* 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 */
|
||||
|
|
|
@ -146,8 +146,8 @@ typedef struct tagMSFT_ImpFile {
|
|||
|
||||
typedef struct tagICreateTypeLib2Impl
|
||||
{
|
||||
ICOM_VFIELD(ICreateTypeLib2);
|
||||
ICOM_VTABLE(ITypeLib2) *lpVtblTypeLib2;
|
||||
ICreateTypeLib2Vtbl *lpVtbl;
|
||||
ITypeLib2Vtbl *lpVtblTypeLib2;
|
||||
|
||||
UINT ref;
|
||||
|
||||
|
@ -172,8 +172,8 @@ typedef struct tagICreateTypeLib2Impl
|
|||
|
||||
typedef struct tagICreateTypeInfo2Impl
|
||||
{
|
||||
ICOM_VFIELD(ICreateTypeInfo2);
|
||||
ICOM_VTABLE(ITypeInfo2) *lpVtblTypeInfo2;
|
||||
ICreateTypeInfo2Vtbl *lpVtbl;
|
||||
ITypeInfo2Vtbl *lpVtblTypeInfo2;
|
||||
|
||||
UINT ref;
|
||||
|
||||
|
@ -253,6 +253,58 @@ static void ctl2_init_segdir(
|
|||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* 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
|
||||
*
|
||||
|
@ -306,7 +358,7 @@ static int ctl2_find_name(
|
|||
*/
|
||||
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_name(
|
|||
*/
|
||||
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 @@ static int ctl2_alloc_guid(
|
|||
{
|
||||
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 @@ static int ctl2_alloc_guid(
|
|||
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_guid(
|
|||
*/
|
||||
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 @@ static int ctl2_alloc_name(
|
|||
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_name(
|
|||
*/
|
||||
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 @@ static int ctl2_alloc_importfile(
|
|||
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 @@ static HRESULT ctl2_set_custdata(
|
|||
|
||||
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 @@ static int ctl2_find_nth_reference(
|
|||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnQueryInterface(
|
|||
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 HRESULT WINAPI ICreateTypeInfo2_fnQueryInterface(
|
|||
*/
|
||||
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_fnAddRef(ICreateTypeInfo2 *iface)
|
|||
*/
|
||||
static ULONG WINAPI ICreateTypeInfo2_fnRelease(ICreateTypeInfo2 *iface)
|
||||
{
|
||||
ICOM_THIS( ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
--(This->ref);
|
||||
|
||||
|
@ -1106,7 +1178,7 @@ static ULONG WINAPI ICreateTypeInfo2_fnRelease(ICreateTypeInfo2 *iface)
|
|||
*/
|
||||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface, REFGUI
|
|||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetGuid(ICreateTypeInfo2 *iface, REFGUI
|
|||
|
||||
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_fnSetGuid(ICreateTypeInfo2 *iface, REFGUI
|
|||
*/
|
||||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface, U
|
|||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeFlags(ICreateTypeInfo2 *iface, U
|
|||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetDocString(
|
|||
ICreateTypeInfo2* iface,
|
||||
LPOLESTR pStrDoc)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
int offset;
|
||||
|
||||
|
@ -1207,8 +1283,13 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetHelpContext(
|
|||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVersion(
|
|||
WORD wMajorVerNum,
|
||||
WORD wMinorVerNum)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
TRACE("(%p,%d,%d)\n", iface, wMajorVerNum, wMinorVerNum);
|
||||
|
||||
|
@ -1239,7 +1320,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(
|
|||
ITypeInfo* pTInfo,
|
||||
HREFTYPE* phRefType)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
ITypeLib *container;
|
||||
int index;
|
||||
|
@ -1281,7 +1362,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddFuncDesc(
|
|||
UINT index,
|
||||
FUNCDESC* pFuncDesc)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
int offset;
|
||||
int *typedata;
|
||||
|
@ -1365,7 +1446,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddImplType(
|
|||
UINT index,
|
||||
HREFTYPE hRefType)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
TRACE("(%p,%d,%ld)\n", iface, index, hRefType);
|
||||
|
||||
|
@ -1434,7 +1515,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetImplTypeFlags(
|
|||
UINT index,
|
||||
INT implTypeFlags)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
int offset;
|
||||
MSFT_RefRecord *ref;
|
||||
|
||||
|
@ -1462,7 +1543,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetAlignment(
|
|||
ICreateTypeInfo2* iface,
|
||||
WORD cbAlignment)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
TRACE("(%p,%d)\n", iface, cbAlignment);
|
||||
|
||||
|
@ -1520,7 +1601,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddVarDesc(
|
|||
UINT index,
|
||||
VARDESC* pVarDesc)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
int offset;
|
||||
INT *typedata;
|
||||
int var_datawidth;
|
||||
|
@ -1613,7 +1694,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetFuncAndParamNames(
|
|||
LPOLESTR* rgszNames,
|
||||
UINT cNames)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
|
||||
int i;
|
||||
int offset;
|
||||
|
@ -1651,7 +1732,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(
|
|||
UINT index,
|
||||
LPOLESTR szName)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeInfo2Impl, iface);
|
||||
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
|
||||
int offset;
|
||||
char *namedata;
|
||||
|
||||
|
@ -1666,8 +1747,10 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarName(
|
|||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetTypeDescAlias(
|
|||
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 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetVarDocString(
|
|||
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 @@ static HRESULT WINAPI ITypeInfo2_fnGetAllImplTypeCustData(
|
|||
|
||||
/*================== 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 @@ static ICOM_VTABLE(ICreateTypeInfo2) ctypeinfo2vt =
|
|||
ICreateTypeInfo2_fnSetName
|
||||
};
|
||||
|
||||
static ICOM_VTABLE(ITypeInfo2) typeinfo2vt =
|
||||
static ITypeInfo2Vtbl typeinfo2vt =
|
||||
{
|
||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||
|
||||
ITypeInfo2_fnQueryInterface,
|
||||
ITypeInfo2_fnAddRef,
|
||||
|
@ -2873,7 +2971,7 @@ static HRESULT WINAPI ICreateTypeLib2_fnQueryInterface(
|
|||
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 HRESULT WINAPI ICreateTypeLib2_fnQueryInterface(
|
|||
*/
|
||||
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_fnAddRef(ICreateTypeLib2 *iface)
|
|||
*/
|
||||
static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface)
|
||||
{
|
||||
ICOM_THIS( ICreateTypeLib2Impl, iface);
|
||||
ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
|
||||
|
||||
--(This->ref);
|
||||
|
||||
|
@ -2966,7 +3064,7 @@ static HRESULT WINAPI ICreateTypeLib2_fnCreateTypeInfo(
|
|||
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 @@ static HRESULT WINAPI ICreateTypeLib2_fnSetName(
|
|||
ICreateTypeLib2 * iface,
|
||||
LPOLESTR szName)
|
||||
{
|
||||
ICOM_THIS(ICreateTypeLib2Impl, iface);
|
||||
ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
|
||||
|
||||
int offset;
|
||||
|
||||
|
@ -3005,7 +3103,7 @@ static HRESULT WINAPI ICreateTypeLib2_fnSetName(
|
|||
*/
|
||||
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_fnSetVersion(ICreateTypeLib2 * iface, WORD
|
|||
*/
|
||||
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 @@ static HRESULT WINAPI ICreateTypeLib2_fnSetGuid(ICreateTypeLib2 * iface, REFGUID
|
|||
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_fnSetGuid(ICreateTypeLib2 * iface, REFGUID
|
|||
*/
|
||||
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_fnSetDocString(ICreateTypeLib2 * iface, LP
|
|||
*/
|
||||
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_fnSetHelpContext(ICreateTypeLib2 * iface,
|
|||
*/
|
||||
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_fnSetLcid(ICreateTypeLib2 * iface, LCID lc
|
|||
*/
|
||||
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 HRESULT WINAPI ICreateTypeLib2_fnSetLibFlags(ICreateTypeLib2 * iface, UIN
|
|||
|
||||
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 void ctl2_write_typeinfos(ICreateTypeLib2Impl *This, HANDLE hFile)
|
|||
*/
|
||||
static HRESULT WINAPI ICreateTypeLib2_fnSaveAllChanges(ICreateTypeLib2 * iface)
|
||||
{
|
||||
ICOM_THIS( ICreateTypeLib2Impl, iface);
|
||||
ICreateTypeLib2Impl *This = (ICreateTypeLib2Impl *)iface;
|
||||
|
||||
int retval;
|
||||
int filepos;
|
||||
|
@ -3275,7 +3378,7 @@ static HRESULT WINAPI ICreateTypeLib2_fnSetCustData(
|
|||
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 ULONG WINAPI ITypeLib2_fnRelease(ITypeLib2 * iface)
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfo(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoType(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoOfGuid(
|
|||
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 @@ static HRESULT WINAPI ITypeLib2_fnIsName(
|
|||
ULONG lHashVal,
|
||||
BOOL* pfName)
|
||||
{
|
||||
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */
|
||||
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface);
|
||||
|
||||
FIXME("(%p,%s,%lx,%p), stub!\n", iface, debugstr_w(szNameBuf), lHashVal, pfName);
|
||||
char *encoded_name;
|
||||
int nameoffset;
|
||||
MSFT_NameIntro *nameintro;
|
||||
|
||||
return E_OUTOFMEMORY;
|
||||
TRACE("(%p,%s,%lx,%p)\n", iface, debugstr_w(szNameBuf), lHashVal, pfName);
|
||||
|
||||
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 @@ static HRESULT WINAPI ITypeLib2_fnGetAllCustData(
|
|||
|
||||
/*================== 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 @@ static ICOM_VTABLE(ICreateTypeLib2) ctypelib2vt =
|
|||
ICreateTypeLib2_fnSetHelpStringDll
|
||||
};
|
||||
|
||||
static ICOM_VTABLE(ITypeLib2) typelib2vt =
|
||||
static ITypeLib2Vtbl typelib2vt =
|
||||
{
|
||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||
|
||||
ITypeLib2_fnQueryInterface,
|
||||
ITypeLib2_fnAddRef,
|
||||
|
@ -3742,3 +3880,33 @@ HRESULT WINAPI CreateTypeLib2(
|
|||
*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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,3 +82,8 @@ DEFINE_GUID(IID_IDPLobbySP,0x5a4e5a20,0x2ced,0x11d0,0xa8,0x89,0x00,0xa0,0xc9,0x0
|
|||
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);
|
||||
|
|
|
@ -424,7 +424,8 @@ typedef enum tagTYPEFLAGS {
|
|||
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 @@ DECLARE_INTERFACE_(IEnumVARIANT,IUnknown)
|
|||
};
|
||||
#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 @@ DECLARE_INTERFACE_(ITypeComp,IUnknown)
|
|||
};
|
||||
#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 @@ DECLARE_INTERFACE_(ITypeInfo2,ITypeInfo)
|
|||
};
|
||||
#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 @@ DECLARE_INTERFACE_(ITypeLib,IUnknown)
|
|||
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 @@ DECLARE_INTERFACE_(ITypeLib,IUnknown)
|
|||
};
|
||||
#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 @@ DECLARE_INTERFACE_(ITypeLib2,ITypeLib)
|
|||
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 @@ DECLARE_INTERFACE_(ITypeLib2,ITypeLib)
|
|||
};
|
||||
#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 @@ DECLARE_INTERFACE_(ITypeMarshal, IUnknown)
|
|||
};
|
||||
#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
|
||||
|
|
|
@ -796,11 +796,11 @@ DECLARE_INTERFACE_(IRpcStubBuffer,IUnknown)
|
|||
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
|
||||
|
||||
|
|
|
@ -217,6 +217,14 @@ DECLARE_INTERFACE_(IPropertyBag,IUnknown)
|
|||
};
|
||||
#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 @@ DECLARE_INTERFACE_(IPropertyBag2,IUnknown)
|
|||
};
|
||||
#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 @@ DECLARE_INTERFACE_(IFont,IUnknown)
|
|||
};
|
||||
#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)
|
||||
|
|
|
@ -154,6 +154,8 @@
|
|||
|
||||
#include <oaidl.h>
|
||||
|
||||
EXTERN_C const IID IID_StdOle;
|
||||
|
||||
typedef enum tagREGKIND {
|
||||
REGKIND_DEFAULT,
|
||||
REGKIND_REGISTER,
|
||||
|
|
|
@ -54,6 +54,15 @@ typedef long RPC_STATUS;
|
|||
#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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -20,6 +20,10 @@ extern "C" {
|
|||
#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 @@ DLLREGISTRY_ROUTINES(pProxyFileList, pClsID)
|
|||
|
||||
#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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue