ReactOS 0.4.17-dev-540-g8f54750
usrmarshal.c File Reference
#include <stdarg.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "winerror.h"
#include "ole2.h"
#include "oleauto.h"
#include "typelib.h"
#include "ocidl.h"
#include "wine/debug.h"
Include dependency graph for usrmarshal.c:

Go to the source code of this file.

Classes

struct  bstr_wire_t
 
struct  variant_wire_t
 

Macros

#define COBJMACROS
 
#define ALIGNED_LENGTH(_Len, _Align)   (((_Len)+(_Align))&~(_Align))
 
#define ALIGNED_POINTER(_Ptr, _Align)   ((LPVOID)ALIGNED_LENGTH((ULONG_PTR)(_Ptr), _Align))
 
#define ALIGN_LENGTH(_Len, _Align)   _Len = ALIGNED_LENGTH(_Len, _Align)
 
#define ALIGN_POINTER(_Ptr, _Align)   _Ptr = ALIGNED_POINTER(_Ptr, _Align)
 
#define CLS_FUNCDESC   'f'
 
#define CLS_LIBATTR   'l'
 
#define CLS_TYPEATTR   't'
 
#define CLS_VARDESC   'v'
 
#define FADF_AUTOSETFLAGS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ole)
 
ULONG __RPC_USER WdtpInterfacePointer_UserSize (ULONG *, ULONG, ULONG, IUnknown *, REFIID)
 
unsigned char *__RPC_USER WdtpInterfacePointer_UserMarshal (ULONG *, ULONG, unsigned char *, IUnknown *, REFIID)
 
unsigned char *__RPC_USER WdtpInterfacePointer_UserUnmarshal (ULONG *, unsigned char *, IUnknown **, REFIID)
 
static void dump_user_flags (const ULONG *pFlags)
 
ULONG WINAPI CLEANLOCALSTORAGE_UserSize (ULONG *pFlags, ULONG Start, CLEANLOCALSTORAGE *pstg)
 
unsigned char *WINAPI CLEANLOCALSTORAGE_UserMarshal (ULONG *pFlags, unsigned char *Buffer, CLEANLOCALSTORAGE *pstg)
 
unsigned char *WINAPI CLEANLOCALSTORAGE_UserUnmarshal (ULONG *pFlags, unsigned char *Buffer, CLEANLOCALSTORAGE *pstr)
 
void WINAPI CLEANLOCALSTORAGE_UserFree (ULONG *pFlags, CLEANLOCALSTORAGE *pstr)
 
ULONG WINAPI BSTR_UserSize (ULONG *pFlags, ULONG Start, BSTR *pstr)
 
unsigned char *WINAPI BSTR_UserMarshal (ULONG *pFlags, unsigned char *Buffer, BSTR *pstr)
 
unsigned char *WINAPI BSTR_UserUnmarshal (ULONG *pFlags, unsigned char *Buffer, BSTR *pstr)
 
void WINAPI BSTR_UserFree (ULONG *pFlags, BSTR *pstr)
 
unsigned int get_type_size (ULONG *pFlags, VARTYPE vt)
 
static unsigned int get_type_alignment (ULONG *pFlags, VARTYPE vt)
 
static unsigned interface_user_size (ULONG *pFlags, ULONG Start, REFIID riid, IUnknown *punk)
 
static ULONG wire_extra_user_size (ULONG *pFlags, ULONG Start, VARIANT *pvar)
 
static unsigned charinterface_user_marshal (ULONG *pFlags, unsigned char *Buffer, REFIID riid, IUnknown *punk)
 
static unsigned charinterface_user_unmarshal (ULONG *pFlags, unsigned char *Buffer, REFIID riid, IUnknown **ppunk)
 
ULONG WINAPI VARIANT_UserSize (ULONG *pFlags, ULONG Start, VARIANT *pvar)
 
unsigned char *WINAPI VARIANT_UserMarshal (ULONG *pFlags, unsigned char *Buffer, VARIANT *pvar)
 
unsigned char *WINAPI VARIANT_UserUnmarshal (ULONG *pFlags, unsigned char *Buffer, VARIANT *pvar)
 
void WINAPI VARIANT_UserFree (ULONG *pFlags, VARIANT *pvar)
 
static ULONG SAFEARRAY_GetCellCount (const SAFEARRAY *psa)
 
static SF_TYPE SAFEARRAY_GetUnionType (SAFEARRAY *psa)
 
static DWORD elem_wire_size (LPSAFEARRAY lpsa, SF_TYPE sftype)
 
static DWORD elem_mem_size (wireSAFEARRAY wiresa, SF_TYPE sftype)
 
ULONG WINAPI LPSAFEARRAY_UserSize (ULONG *pFlags, ULONG StartingSize, LPSAFEARRAY *ppsa)
 
unsigned char *WINAPI LPSAFEARRAY_UserMarshal (ULONG *pFlags, unsigned char *Buffer, LPSAFEARRAY *ppsa)
 
unsigned char *WINAPI LPSAFEARRAY_UserUnmarshal (ULONG *pFlags, unsigned char *Buffer, LPSAFEARRAY *ppsa)
 
void WINAPI LPSAFEARRAY_UserFree (ULONG *pFlags, LPSAFEARRAY *ppsa)
 
ULONG WINAPI HFONT_UserSize (ULONG *pFlags, ULONG Start, HFONT *phfont)
 
unsigned char *WINAPI HFONT_UserMarshal (ULONG *pFlags, unsigned char *Buffer, HFONT *phfont)
 
unsigned char *WINAPI HFONT_UserUnmarshal (ULONG *pFlags, unsigned char *Buffer, HFONT *phfont)
 
void WINAPI HFONT_UserFree (ULONG *pFlags, HFONT *phfont)
 
HRESULT CALLBACK IDispatch_Invoke_Proxy (IDispatch *This, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
 
HRESULT __RPC_STUB IDispatch_Invoke_Stub (IDispatch *This, DISPID dispIdMember, REFIID riid, LCID lcid, DWORD dwFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *pArgErr, UINT cVarRef, UINT *rgVarRefIdx, VARIANTARG *rgVarRef)
 
HRESULT CALLBACK IEnumVARIANT_Next_Proxy (IEnumVARIANT *This, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched)
 
HRESULT __RPC_STUB IEnumVARIANT_Next_Stub (IEnumVARIANT *This, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched)
 
static void free_embedded_typedesc (TYPEDESC *tdesc)
 
static void free_embedded_arraydesc (ARRAYDESC *adesc)
 
static void free_embedded_elemdesc (ELEMDESC *edesc)
 
HRESULT CALLBACK ITypeComp_Bind_Proxy (ITypeComp *This, LPOLESTR name, ULONG lHashVal, WORD flags, ITypeInfo **ti, DESCKIND *desckind, BINDPTR *bindptr)
 
HRESULT __RPC_STUB ITypeComp_Bind_Stub (ITypeComp *This, LPOLESTR name, ULONG lHashVal, WORD flags, ITypeInfo **ti, DESCKIND *desckind, FUNCDESC **funcdesc, VARDESC **vardesc, ITypeComp **typecomp, CLEANLOCALSTORAGE *stg)
 
HRESULT CALLBACK ITypeComp_BindType_Proxy (ITypeComp *This, LPOLESTR name, ULONG lHashVal, ITypeInfo **ti, ITypeComp **typecomp)
 
HRESULT __RPC_STUB ITypeComp_BindType_Stub (ITypeComp *This, LPOLESTR name, ULONG lHashVal, ITypeInfo **ti)
 
HRESULT CALLBACK ITypeInfo_GetTypeAttr_Proxy (ITypeInfo *This, TYPEATTR **ppTypeAttr)
 
HRESULT __RPC_STUB ITypeInfo_GetTypeAttr_Stub (ITypeInfo *This, LPTYPEATTR *ppTypeAttr, CLEANLOCALSTORAGE *pDummy)
 
HRESULT CALLBACK ITypeInfo_GetFuncDesc_Proxy (ITypeInfo *This, UINT index, FUNCDESC **ppFuncDesc)
 
HRESULT __RPC_STUB ITypeInfo_GetFuncDesc_Stub (ITypeInfo *This, UINT index, LPFUNCDESC *ppFuncDesc, CLEANLOCALSTORAGE *pDummy)
 
HRESULT CALLBACK ITypeInfo_GetVarDesc_Proxy (ITypeInfo *This, UINT index, VARDESC **ppVarDesc)
 
HRESULT __RPC_STUB ITypeInfo_GetVarDesc_Stub (ITypeInfo *This, UINT index, LPVARDESC *ppVarDesc, CLEANLOCALSTORAGE *pDummy)
 
HRESULT CALLBACK ITypeInfo_GetNames_Proxy (ITypeInfo *This, MEMBERID memid, BSTR *rgBstrNames, UINT cMaxNames, UINT *pcNames)
 
HRESULT __RPC_STUB ITypeInfo_GetNames_Stub (ITypeInfo *This, MEMBERID memid, BSTR *rgBstrNames, UINT cMaxNames, UINT *pcNames)
 
HRESULT CALLBACK ITypeInfo_GetIDsOfNames_Proxy (ITypeInfo *This, LPOLESTR *rgszNames, UINT cNames, MEMBERID *pMemId)
 
HRESULT __RPC_STUB ITypeInfo_GetIDsOfNames_Stub (ITypeInfo *This)
 
HRESULT CALLBACK ITypeInfo_Invoke_Proxy (ITypeInfo *This, PVOID pvInstance, MEMBERID memid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
 
HRESULT __RPC_STUB ITypeInfo_Invoke_Stub (ITypeInfo *This)
 
HRESULT CALLBACK ITypeInfo_GetDocumentation_Proxy (ITypeInfo *This, MEMBERID memid, BSTR *name, BSTR *doc_string, DWORD *help_context, BSTR *help_file)
 
HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub (ITypeInfo *This, MEMBERID memid, DWORD flags, BSTR *name, BSTR *doc_string, DWORD *help_context, BSTR *help_file)
 
HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy (ITypeInfo *This, MEMBERID memid, INVOKEKIND invkind, BSTR *dll_name, BSTR *name, WORD *ordinal)
 
HRESULT __RPC_STUB ITypeInfo_GetDllEntry_Stub (ITypeInfo *This, MEMBERID memid, INVOKEKIND invkind, DWORD flags, BSTR *dll_name, BSTR *name, WORD *ordinal)
 
HRESULT CALLBACK ITypeInfo_AddressOfMember_Proxy (ITypeInfo *This, MEMBERID memid, INVOKEKIND invKind, PVOID *ppv)
 
HRESULT __RPC_STUB ITypeInfo_AddressOfMember_Stub (ITypeInfo *This)
 
HRESULT CALLBACK ITypeInfo_CreateInstance_Proxy (ITypeInfo *This, IUnknown *pUnkOuter, REFIID riid, PVOID *ppvObj)
 
HRESULT __RPC_STUB ITypeInfo_CreateInstance_Stub (ITypeInfo *This, REFIID riid, IUnknown **ppvObj)
 
HRESULT CALLBACK ITypeInfo_GetContainingTypeLib_Proxy (ITypeInfo *This, ITypeLib **ppTLib, UINT *pIndex)
 
HRESULT __RPC_STUB ITypeInfo_GetContainingTypeLib_Stub (ITypeInfo *This, ITypeLib **ppTLib, UINT *pIndex)
 
void CALLBACK ITypeInfo_ReleaseTypeAttr_Proxy (ITypeInfo *This, TYPEATTR *pTypeAttr)
 
HRESULT __RPC_STUB ITypeInfo_ReleaseTypeAttr_Stub (ITypeInfo *This)
 
void CALLBACK ITypeInfo_ReleaseFuncDesc_Proxy (ITypeInfo *This, FUNCDESC *pFuncDesc)
 
HRESULT __RPC_STUB ITypeInfo_ReleaseFuncDesc_Stub (ITypeInfo *This)
 
void CALLBACK ITypeInfo_ReleaseVarDesc_Proxy (ITypeInfo *This, VARDESC *pVarDesc)
 
HRESULT __RPC_STUB ITypeInfo_ReleaseVarDesc_Stub (ITypeInfo *This)
 
HRESULT CALLBACK ITypeInfo2_GetDocumentation2_Proxy (ITypeInfo2 *This, MEMBERID memid, LCID lcid, BSTR *help_string, DWORD *help_context, BSTR *help_dll)
 
HRESULT __RPC_STUB ITypeInfo2_GetDocumentation2_Stub (ITypeInfo2 *This, MEMBERID memid, LCID lcid, DWORD flags, BSTR *help_string, DWORD *help_context, BSTR *help_dll)
 
UINT CALLBACK ITypeLib_GetTypeInfoCount_Proxy (ITypeLib *This)
 
HRESULT __RPC_STUB ITypeLib_GetTypeInfoCount_Stub (ITypeLib *This, UINT *pcTInfo)
 
HRESULT CALLBACK ITypeLib_GetLibAttr_Proxy (ITypeLib *This, TLIBATTR **ppTLibAttr)
 
HRESULT __RPC_STUB ITypeLib_GetLibAttr_Stub (ITypeLib *This, LPTLIBATTR *ppTLibAttr, CLEANLOCALSTORAGE *pDummy)
 
HRESULT CALLBACK ITypeLib_GetDocumentation_Proxy (ITypeLib *This, INT index, BSTR *name, BSTR *doc_string, DWORD *help_context, BSTR *help_file)
 
HRESULT __RPC_STUB ITypeLib_GetDocumentation_Stub (ITypeLib *This, INT index, DWORD flags, BSTR *name, BSTR *doc_string, DWORD *help_context, BSTR *help_file)
 
HRESULT CALLBACK ITypeLib_IsName_Proxy (ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName)
 
HRESULT __RPC_STUB ITypeLib_IsName_Stub (ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, BOOL *pfName, BSTR *pBstrLibName)
 
HRESULT CALLBACK ITypeLib_FindName_Proxy (ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, ITypeInfo **ppTInfo, MEMBERID *rgMemId, USHORT *pcFound)
 
HRESULT __RPC_STUB ITypeLib_FindName_Stub (ITypeLib *This, LPOLESTR szNameBuf, ULONG lHashVal, ITypeInfo **ppTInfo, MEMBERID *rgMemId, USHORT *pcFound, BSTR *pBstrLibName)
 
void CALLBACK ITypeLib_ReleaseTLibAttr_Proxy (ITypeLib *This, TLIBATTR *pTLibAttr)
 
HRESULT __RPC_STUB ITypeLib_ReleaseTLibAttr_Stub (ITypeLib *This)
 
HRESULT CALLBACK ITypeLib2_GetLibStatistics_Proxy (ITypeLib2 *This, ULONG *pcUniqueNames, ULONG *pcchUniqueNames)
 
HRESULT __RPC_STUB ITypeLib2_GetLibStatistics_Stub (ITypeLib2 *This, ULONG *pcUniqueNames, ULONG *pcchUniqueNames)
 
HRESULT CALLBACK ITypeLib2_GetDocumentation2_Proxy (ITypeLib2 *This, INT index, LCID lcid, BSTR *help_string, DWORD *help_context, BSTR *help_dll)
 
HRESULT __RPC_STUB ITypeLib2_GetDocumentation2_Stub (ITypeLib2 *This, INT index, LCID lcid, DWORD flags, BSTR *help_string, DWORD *help_context, BSTR *help_dll)
 
HRESULT CALLBACK IPropertyBag_Read_Proxy (IPropertyBag *This, LPCOLESTR pszPropName, VARIANT *pVar, IErrorLog *pErrorLog)
 
HRESULT __RPC_STUB IPropertyBag_Read_Stub (IPropertyBag *This, LPCOLESTR pszPropName, VARIANT *pVar, IErrorLog *pErrorLog, DWORD varType, IUnknown *pUnkObj)
 
HRESULT CALLBACK IClassFactory2_CreateInstanceLic_Proxy (IClassFactory2 *This, IUnknown *pUnkOuter, IUnknown *pUnkReserved, REFIID riid, BSTR bstrKey, PVOID *ppvObj)
 
HRESULT __RPC_STUB IClassFactory2_CreateInstanceLic_Stub (IClassFactory2 *This, REFIID riid, BSTR bstrKey, IUnknown **ppvObj)
 
HRESULT CALLBACK IEnumConnections_Next_Proxy (IEnumConnections *This, ULONG cConnections, LPCONNECTDATA rgcd, ULONG *pcFetched)
 
HRESULT __RPC_STUB IEnumConnections_Next_Stub (IEnumConnections *This, ULONG cConnections, LPCONNECTDATA rgcd, ULONG *pcFetched)
 
HRESULT CALLBACK IEnumConnectionPoints_Next_Proxy (IEnumConnectionPoints *This, ULONG cConnections, IConnectionPoint **ppCP, ULONG *pcFetched)
 
HRESULT __RPC_STUB IEnumConnectionPoints_Next_Stub (IEnumConnectionPoints *This, ULONG cConnections, IConnectionPoint **ppCP, ULONG *pcFetched)
 
HRESULT CALLBACK IPersistMemory_Load_Proxy (IPersistMemory *This, LPVOID pMem, ULONG cbSize)
 
HRESULT __RPC_STUB IPersistMemory_Load_Stub (IPersistMemory *This, BYTE *pMem, ULONG cbSize)
 
HRESULT CALLBACK IPersistMemory_Save_Proxy (IPersistMemory *This, LPVOID pMem, BOOL fClearDirty, ULONG cbSize)
 
HRESULT __RPC_STUB IPersistMemory_Save_Stub (IPersistMemory *This, BYTE *pMem, BOOL fClearDirty, ULONG cbSize)
 
void CALLBACK IAdviseSinkEx_OnViewStatusChange_Proxy (IAdviseSinkEx *This, DWORD dwViewStatus)
 
HRESULT __RPC_STUB IAdviseSinkEx_OnViewStatusChange_Stub (IAdviseSinkEx *This, DWORD dwViewStatus)
 
HRESULT CALLBACK IEnumOleUndoUnits_Next_Proxy (IEnumOleUndoUnits *This, ULONG cElt, IOleUndoUnit **rgElt, ULONG *pcEltFetched)
 
HRESULT __RPC_STUB IEnumOleUndoUnits_Next_Stub (IEnumOleUndoUnits *This, ULONG cElt, IOleUndoUnit **rgElt, ULONG *pcEltFetched)
 
HRESULT CALLBACK IQuickActivate_QuickActivate_Proxy (IQuickActivate *This, QACONTAINER *pQaContainer, QACONTROL *pQaControl)
 
HRESULT __RPC_STUB IQuickActivate_QuickActivate_Stub (IQuickActivate *This, QACONTAINER *pQaContainer, QACONTROL *pQaControl)
 

Macro Definition Documentation

◆ ALIGN_LENGTH

#define ALIGN_LENGTH (   _Len,
  _Align 
)    _Len = ALIGNED_LENGTH(_Len, _Align)

Definition at line 42 of file usrmarshal.c.

◆ ALIGN_POINTER

#define ALIGN_POINTER (   _Ptr,
  _Align 
)    _Ptr = ALIGNED_POINTER(_Ptr, _Align)

Definition at line 43 of file usrmarshal.c.

◆ ALIGNED_LENGTH

#define ALIGNED_LENGTH (   _Len,
  _Align 
)    (((_Len)+(_Align))&~(_Align))

Definition at line 40 of file usrmarshal.c.

◆ ALIGNED_POINTER

#define ALIGNED_POINTER (   _Ptr,
  _Align 
)    ((LPVOID)ALIGNED_LENGTH((ULONG_PTR)(_Ptr), _Align))

Definition at line 41 of file usrmarshal.c.

◆ CLS_FUNCDESC

#define CLS_FUNCDESC   'f'

Definition at line 68 of file usrmarshal.c.

◆ CLS_LIBATTR

#define CLS_LIBATTR   'l'

Definition at line 69 of file usrmarshal.c.

◆ CLS_TYPEATTR

#define CLS_TYPEATTR   't'

Definition at line 70 of file usrmarshal.c.

◆ CLS_VARDESC

#define CLS_VARDESC   'v'

Definition at line 71 of file usrmarshal.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 25 of file usrmarshal.c.

◆ FADF_AUTOSETFLAGS

#define FADF_AUTOSETFLAGS
Value:
(FADF_HAVEIID | FADF_RECORD | FADF_HAVEVARTYPE | \
FADF_BSTR | FADF_UNKNOWN | FADF_DISPATCH | \
FADF_VARIANT | FADF_CREATEVECTOR)
const USHORT FADF_CREATEVECTOR
Definition: safearray.c:43

Definition at line 1025 of file usrmarshal.c.

Function Documentation

◆ BSTR_UserFree()

void WINAPI BSTR_UserFree ( ULONG pFlags,
BSTR pstr 
)

Definition at line 187 of file usrmarshal.c.

188{
189 TRACE("%#lx, %p => %p\n", *pFlags, pstr, *pstr);
190 SysFreeString(*pstr);
191 *pstr = NULL;
192}
#define NULL
Definition: types.h:112
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:273
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by test_marshal_BSTR(), and VARIANT_UserFree().

◆ BSTR_UserMarshal()

unsigned char *WINAPI BSTR_UserMarshal ( ULONG pFlags,
unsigned char Buffer,
BSTR pstr 
)

Definition at line 144 of file usrmarshal.c.

145{
147 DWORD len = SysStringByteLen(*pstr);
148
149 TRACE("%#lx, %p, %p => %p\n", *pFlags, Buffer, pstr, *pstr);
150 if (*pstr) TRACE("string=%s\n", debugstr_w(*pstr));
151
154 header->len = header->len2 = (len + 1) / 2;
155 if (*pstr)
156 {
157 header->byte_len = len;
158 memcpy(header + 1, *pstr, header->len * 2);
159 }
160 else
161 header->byte_len = 0xffffffff; /* special case for a null bstr */
162
163 return Buffer + sizeof(*header) + sizeof(OLECHAR) * header->len;
164}
Definition: bufpool.h:45
#define ALIGN_POINTER(_Ptr, _Align)
Definition: usrmarshal.c:32
WCHAR OLECHAR
Definition: compat.h:2292
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
#define debugstr_w
Definition: kernel32.h:32
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
UINT WINAPI SysStringByteLen(BSTR str)
Definition: oleaut.c:217

Referenced by LPSAFEARRAY_UserMarshal(), test_marshal_BSTR(), and VARIANT_UserMarshal().

◆ BSTR_UserSize()

ULONG WINAPI BSTR_UserSize ( ULONG pFlags,
ULONG  Start,
BSTR pstr 
)

Definition at line 134 of file usrmarshal.c.

135{
136 TRACE("%#lx, %lu, %p => %p\n", *pFlags, Start, pstr, *pstr);
137 if (*pstr) TRACE("string=%s\n", debugstr_w(*pstr));
139 Start += sizeof(bstr_wire_t) + ((SysStringByteLen(*pstr) + 1) & ~1);
140 TRACE("returning %ld\n", Start);
141 return Start;
142}
#define ALIGN_LENGTH(_Len, _Align)
Definition: usrmarshal.c:31
return pTarget Start()

Referenced by LPSAFEARRAY_UserSize(), test_marshal_BSTR(), and wire_extra_user_size().

◆ BSTR_UserUnmarshal()

unsigned char *WINAPI BSTR_UserUnmarshal ( ULONG pFlags,
unsigned char Buffer,
BSTR pstr 
)

Definition at line 166 of file usrmarshal.c.

167{
169 TRACE("%#lx, %p, %p => %p\n", *pFlags, Buffer, pstr, *pstr);
170
173 if(header->len != header->len2)
174 FIXME("len %#lx != len2 %#lx\n", header->len, header->len2);
175
176 if (header->byte_len == 0xffffffff)
177 {
178 SysFreeString(*pstr);
179 *pstr = NULL;
180 }
181 else SysReAllocStringLen( pstr, (OLECHAR *)(header + 1), header->len );
182
183 if (*pstr) TRACE("string=%s\n", debugstr_w(*pstr));
184 return Buffer + sizeof(*header) + sizeof(OLECHAR) * header->len;
185}
#define FIXME(fmt,...)
Definition: precomp.h:53
int WINAPI SysReAllocStringLen(BSTR *old, const OLECHAR *str, unsigned int len)
Definition: oleaut.c:385

Referenced by LPSAFEARRAY_UserUnmarshal(), test_marshal_BSTR(), and VARIANT_UserUnmarshal().

◆ CLEANLOCALSTORAGE_UserFree()

void WINAPI CLEANLOCALSTORAGE_UserFree ( ULONG pFlags,
CLEANLOCALSTORAGE *  pstr 
)

Definition at line 120 of file usrmarshal.c.

121{
122 /* Nothing to do */
123}

◆ CLEANLOCALSTORAGE_UserMarshal()

unsigned char *WINAPI CLEANLOCALSTORAGE_UserMarshal ( ULONG pFlags,
unsigned char Buffer,
CLEANLOCALSTORAGE *  pstg 
)

Definition at line 79 of file usrmarshal.c.

80{
82 *(DWORD*)Buffer = pstg->flags;
83
84 if (!pstg->pInterface)
85 return Buffer + sizeof(DWORD);
86
87 switch(pstg->flags)
88 {
89 case CLS_LIBATTR:
90 ITypeLib_ReleaseTLibAttr((ITypeLib*)pstg->pInterface, *(TLIBATTR**)pstg->pStorage);
91 break;
92 case CLS_TYPEATTR:
93 ITypeInfo_ReleaseTypeAttr((ITypeInfo*)pstg->pInterface, *(TYPEATTR**)pstg->pStorage);
94 break;
95 case CLS_FUNCDESC:
96 ITypeInfo_ReleaseFuncDesc((ITypeInfo*)pstg->pInterface, *(FUNCDESC**)pstg->pStorage);
97 break;
98 case CLS_VARDESC:
99 ITypeInfo_ReleaseVarDesc((ITypeInfo*)pstg->pInterface, *(VARDESC**)pstg->pStorage);
100 break;
101
102 default:
103 ERR("Unknown type %lx\n", pstg->flags);
104 }
105
106 *(VOID**)pstg->pStorage = NULL;
107 IUnknown_Release(pstg->pInterface);
108 pstg->pInterface = NULL;
109
110 return Buffer + sizeof(DWORD);
111}
#define ERR(fmt,...)
Definition: precomp.h:57
#define CLS_VARDESC
Definition: usrmarshal.c:71
#define CLS_FUNCDESC
Definition: usrmarshal.c:68
#define CLS_LIBATTR
Definition: usrmarshal.c:69
#define CLS_TYPEATTR
Definition: usrmarshal.c:70
if(dx< 0)
Definition: linetemp.h:194
#define DWORD
Definition: nt_native.h:44

◆ CLEANLOCALSTORAGE_UserSize()

ULONG WINAPI CLEANLOCALSTORAGE_UserSize ( ULONG pFlags,
ULONG  Start,
CLEANLOCALSTORAGE *  pstg 
)

Definition at line 73 of file usrmarshal.c.

74{
76 return Start + sizeof(DWORD);
77}

◆ CLEANLOCALSTORAGE_UserUnmarshal()

unsigned char *WINAPI CLEANLOCALSTORAGE_UserUnmarshal ( ULONG pFlags,
unsigned char Buffer,
CLEANLOCALSTORAGE *  pstr 
)

Definition at line 113 of file usrmarshal.c.

114{
116 pstr->flags = *(DWORD*)Buffer;
117 return Buffer + sizeof(DWORD);
118}

◆ dump_user_flags()

static void dump_user_flags ( const ULONG pFlags)
static

Definition at line 50 of file usrmarshal.c.

51{
53 TRACE("MAKELONG(NDR_LOCAL_REPRESENTATION, ");
54 else
55 TRACE("MAKELONG(0x%04x, ", HIWORD(*pFlags));
56 switch (LOWORD(*pFlags))
57 {
58 case MSHCTX_LOCAL: TRACE("MSHCTX_LOCAL)"); break;
59 case MSHCTX_NOSHAREDMEM: TRACE("MSHCTX_NOSHAREDMEM)"); break;
60 case MSHCTX_DIFFERENTMACHINE: TRACE("MSHCTX_DIFFERENTMACHINE)"); break;
61 case MSHCTX_INPROC: TRACE("MSHCTX_INPROC)"); break;
62 default: TRACE("%d)", LOWORD(*pFlags));
63 }
64}
#define LOWORD(l)
Definition: pedump.c:82
#define NDR_LOCAL_DATA_REPRESENTATION
Definition: rpcndr.h:68
#define HIWORD(l)
Definition: typedefs.h:247

Referenced by LPSAFEARRAY_UserFree(), LPSAFEARRAY_UserMarshal(), LPSAFEARRAY_UserSize(), and LPSAFEARRAY_UserUnmarshal().

◆ elem_mem_size()

static DWORD elem_mem_size ( wireSAFEARRAY  wiresa,
SF_TYPE  sftype 
)
static

Definition at line 765 of file usrmarshal.c.

766{
767 switch (sftype)
768 {
769 case SF_HAVEIID:
770 case SF_UNKNOWN:
771 case SF_DISPATCH:
772 return sizeof(void *);
773
774 case SF_BSTR:
775 return sizeof(BSTR);
776
777 case SF_VARIANT:
778 return sizeof(VARIANT);
779
780 default:
781 return wiresa->cbElements;
782 }
783}
struct tagVARIANT VARIANT
Definition: compat.h:2377
OLECHAR * BSTR
Definition: compat.h:2293

Referenced by LPSAFEARRAY_UserUnmarshal().

◆ elem_wire_size()

static DWORD elem_wire_size ( LPSAFEARRAY  lpsa,
SF_TYPE  sftype 
)
static

Definition at line 747 of file usrmarshal.c.

748{
749 switch (sftype)
750 {
751 case SF_BSTR:
752 case SF_HAVEIID:
753 case SF_UNKNOWN:
754 case SF_DISPATCH:
755 return sizeof(DWORD);
756
757 case SF_VARIANT:
758 return sizeof(variant_wire_t) - sizeof(DWORD);
759
760 default:
761 return lpsa->cbElements;
762 }
763}
ULONG cbElements
Definition: compat.h:2357

Referenced by check_safearray(), and LPSAFEARRAY_UserMarshal().

◆ free_embedded_arraydesc()

static void free_embedded_arraydesc ( ARRAYDESC *  adesc)
static

Definition at line 1448 of file usrmarshal.c.

1449{
1450 switch(adesc->tdescElem.vt)
1451 {
1452 case VT_PTR:
1453 case VT_SAFEARRAY:
1454 free_embedded_typedesc(adesc->tdescElem.lptdesc);
1455 CoTaskMemFree(adesc->tdescElem.lptdesc);
1456 break;
1457 case VT_CARRAY:
1458 free_embedded_arraydesc(adesc->tdescElem.lpadesc);
1459 CoTaskMemFree(adesc->tdescElem.lpadesc);
1460 break;
1461 }
1462}
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
@ VT_PTR
Definition: compat.h:2320
@ VT_SAFEARRAY
Definition: compat.h:2321
@ VT_CARRAY
Definition: compat.h:2322
static void free_embedded_arraydesc(ARRAYDESC *adesc)
Definition: usrmarshal.c:1448
static void free_embedded_typedesc(TYPEDESC *tdesc)
Definition: usrmarshal.c:1464

Referenced by free_embedded_arraydesc(), and free_embedded_typedesc().

◆ free_embedded_elemdesc()

static void free_embedded_elemdesc ( ELEMDESC *  edesc)
static

Definition at line 1480 of file usrmarshal.c.

1481{
1482 free_embedded_typedesc(&edesc->tdesc);
1483 if(edesc->paramdesc.wParamFlags & PARAMFLAG_FHASDEFAULT)
1484 CoTaskMemFree(edesc->paramdesc.pparamdescex);
1485}

Referenced by ITypeInfo_ReleaseFuncDesc_Proxy(), and ITypeInfo_ReleaseVarDesc_Proxy().

◆ free_embedded_typedesc()

static void free_embedded_typedesc ( TYPEDESC *  tdesc)
static

Definition at line 1464 of file usrmarshal.c.

1465{
1466 switch(tdesc->vt)
1467 {
1468 case VT_PTR:
1469 case VT_SAFEARRAY:
1470 free_embedded_typedesc(tdesc->lptdesc);
1471 CoTaskMemFree(tdesc->lptdesc);
1472 break;
1473 case VT_CARRAY:
1474 free_embedded_arraydesc(tdesc->lpadesc);
1475 CoTaskMemFree(tdesc->lpadesc);
1476 break;
1477 }
1478}

Referenced by free_embedded_arraydesc(), free_embedded_elemdesc(), free_embedded_typedesc(), and ITypeInfo_ReleaseTypeAttr_Proxy().

◆ get_type_alignment()

static unsigned int get_type_alignment ( ULONG pFlags,
VARTYPE  vt 
)
static

Definition at line 259 of file usrmarshal.c.

260{
261 unsigned int size = get_type_size(pFlags, vt);
262 if(vt & VT_BYREF) return 3;
263 if(size == 0) return 0;
264 if(size <= 4) return size - 1;
265 return 7;
266}
@ VT_BYREF
Definition: compat.h:2342
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
unsigned int get_type_size(ULONG *pFlags, VARTYPE vt)
Definition: usrmarshal.c:207
GLsizeiptr size
Definition: glext.h:5919

Referenced by VARIANT_UserMarshal(), VARIANT_UserSize(), and VARIANT_UserUnmarshal().

◆ get_type_size()

unsigned int get_type_size ( ULONG pFlags,
VARTYPE  vt 
)

Definition at line 207 of file usrmarshal.c.

208{
209 if (vt & VT_ARRAY) return 4;
210
211 switch (vt & ~VT_BYREF) {
212 case VT_EMPTY:
213 case VT_NULL:
214 return 0;
215 case VT_I1:
216 case VT_UI1:
217 return sizeof(CHAR);
218 case VT_I2:
219 case VT_UI2:
220 return sizeof(SHORT);
221 case VT_I4:
222 case VT_UI4:
223 case VT_HRESULT:
224 return sizeof(LONG);
225 case VT_INT:
226 case VT_UINT:
227 return sizeof(INT);
228 case VT_I8:
229 case VT_UI8:
230 return sizeof(LONGLONG);
231 case VT_R4:
232 return sizeof(FLOAT);
233 case VT_R8:
234 return sizeof(DOUBLE);
235 case VT_BOOL:
236 return sizeof(VARIANT_BOOL);
237 case VT_ERROR:
238 return sizeof(SCODE);
239 case VT_DATE:
240 return sizeof(DATE);
241 case VT_CY:
242 return sizeof(CY);
243 case VT_DECIMAL:
244 return sizeof(DECIMAL);
245 case VT_BSTR:
246 return sizeof(ULONG);
247 case VT_VARIANT:
248 return sizeof(VARIANT);
249 case VT_UNKNOWN:
250 case VT_DISPATCH:
251 case VT_RECORD:
252 return 0;
253 default:
254 FIXME("unhandled VT %d\n", vt);
255 return 0;
256 }
257}
#define CHAR(Char)
double DATE
Definition: compat.h:2253
union tagCY CY
struct tagDEC DECIMAL
short VARIANT_BOOL
Definition: compat.h:2290
LONG SCODE
Definition: compat.h:2252
@ VT_UI8
Definition: compat.h:2315
@ VT_BSTR
Definition: compat.h:2303
@ VT_INT
Definition: compat.h:2316
@ VT_R4
Definition: compat.h:2299
@ VT_NULL
Definition: compat.h:2296
@ VT_UNKNOWN
Definition: compat.h:2308
@ VT_UI2
Definition: compat.h:2312
@ VT_DECIMAL
Definition: compat.h:2309
@ VT_ERROR
Definition: compat.h:2305
@ VT_ARRAY
Definition: compat.h:2341
@ VT_R8
Definition: compat.h:2300
@ VT_CY
Definition: compat.h:2301
@ VT_VARIANT
Definition: compat.h:2307
@ VT_I8
Definition: compat.h:2314
@ VT_I1
Definition: compat.h:2310
@ VT_I4
Definition: compat.h:2298
@ VT_HRESULT
Definition: compat.h:2319
@ VT_DATE
Definition: compat.h:2302
@ VT_BOOL
Definition: compat.h:2306
@ VT_I2
Definition: compat.h:2297
@ VT_UI4
Definition: compat.h:2313
@ VT_UINT
Definition: compat.h:2317
@ VT_EMPTY
Definition: compat.h:2295
@ VT_RECORD
Definition: compat.h:2326
@ VT_DISPATCH
Definition: compat.h:2304
@ VT_UI1
Definition: compat.h:2311
#define FLOAT
Definition: i386-dis.c:525
#define DOUBLE(x)
Definition: atom.c:30
short SHORT
Definition: pedump.c:59
long LONG
Definition: pedump.c:60
#define INT
Definition: polytest.cpp:20
int64_t LONGLONG
Definition: typedefs.h:68
uint32_t ULONG
Definition: typedefs.h:59

Referenced by create_signature_columns_and_data(), get_type_alignment(), IRecordInfoImpl_RecordCopy(), to_array(), VARIANT_UserMarshal(), VARIANT_UserSize(), and VARIANT_UserUnmarshal().

◆ HFONT_UserFree()

void WINAPI HFONT_UserFree ( ULONG pFlags,
HFONT *  phfont 
)

Definition at line 1234 of file usrmarshal.c.

1235{
1236 FIXME(":stub\n");
1237 return;
1238}

◆ HFONT_UserMarshal()

unsigned char *WINAPI HFONT_UserMarshal ( ULONG pFlags,
unsigned char Buffer,
HFONT *  phfont 
)

Definition at line 1222 of file usrmarshal.c.

1223{
1224 FIXME(":stub\n");
1225 return NULL;
1226}

◆ HFONT_UserSize()

ULONG WINAPI HFONT_UserSize ( ULONG pFlags,
ULONG  Start,
HFONT *  phfont 
)

Definition at line 1216 of file usrmarshal.c.

1217{
1218 FIXME(":stub\n");
1219 return 0;
1220}

◆ HFONT_UserUnmarshal()

unsigned char *WINAPI HFONT_UserUnmarshal ( ULONG pFlags,
unsigned char Buffer,
HFONT *  phfont 
)

Definition at line 1228 of file usrmarshal.c.

1229{
1230 FIXME(":stub\n");
1231 return NULL;
1232}

◆ IAdviseSinkEx_OnViewStatusChange_Proxy()

void CALLBACK IAdviseSinkEx_OnViewStatusChange_Proxy ( IAdviseSinkEx This,
DWORD  dwViewStatus 
)

Definition at line 2529 of file usrmarshal.c.

2532{
2533 TRACE("%p, %#lx.\n", This, dwViewStatus);
2534 IAdviseSinkEx_RemoteOnViewStatusChange_Proxy(This, dwViewStatus);
2535}

◆ IAdviseSinkEx_OnViewStatusChange_Stub()

HRESULT __RPC_STUB IAdviseSinkEx_OnViewStatusChange_Stub ( IAdviseSinkEx This,
DWORD  dwViewStatus 
)

Definition at line 2537 of file usrmarshal.c.

2540{
2541 TRACE("%p, %#lx.\n", This, dwViewStatus);
2542 IAdviseSinkEx_OnViewStatusChange(This, dwViewStatus);
2543 return S_OK;
2544}
#define S_OK
Definition: intsafe.h:52

◆ IClassFactory2_CreateInstanceLic_Proxy()

HRESULT CALLBACK IClassFactory2_CreateInstanceLic_Proxy ( IClassFactory2 This,
IUnknown pUnkOuter,
IUnknown pUnkReserved,
REFIID  riid,
BSTR  bstrKey,
PVOID ppvObj 
)

Definition at line 2384 of file usrmarshal.c.

2391{
2392 TRACE("(%p, %s, %p)\n", pUnkOuter, debugstr_guid(riid), ppvObj);
2393
2394 *ppvObj = NULL;
2395
2396 if (pUnkOuter)
2397 {
2398 ERR("aggregation is not allowed on remote objects\n");
2399 return CLASS_E_NOAGGREGATION;
2400 }
2401
2402 return IClassFactory2_RemoteCreateInstanceLic_Proxy(This, riid, bstrKey, (IUnknown**)ppvObj);
2403}
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

◆ IClassFactory2_CreateInstanceLic_Stub()

HRESULT __RPC_STUB IClassFactory2_CreateInstanceLic_Stub ( IClassFactory2 This,
REFIID  riid,
BSTR  bstrKey,
IUnknown **  ppvObj 
)

Definition at line 2405 of file usrmarshal.c.

2410{
2411 TRACE("(%s, %p)\n", debugstr_guid(riid), ppvObj);
2412 return IClassFactory2_CreateInstanceLic(This, NULL, NULL, riid, bstrKey, (void**)ppvObj);
2413}

◆ IDispatch_Invoke_Proxy()

HRESULT CALLBACK IDispatch_Invoke_Proxy ( IDispatch This,
DISPID  dispIdMember,
REFIID  riid,
LCID  lcid,
WORD  wFlags,
DISPPARAMS *  pDispParams,
VARIANT pVarResult,
EXCEPINFO *  pExcepInfo,
UINT puArgErr 
)

Definition at line 1245 of file usrmarshal.c.

1255{
1256 HRESULT hr;
1257 VARIANT VarResult;
1258 UINT* rgVarRefIdx = NULL;
1259 VARIANTARG* rgVarRef = NULL;
1260 UINT u, cVarRef;
1261 UINT uArgErr;
1262 EXCEPINFO ExcepInfo;
1263
1264 TRACE("%p, %ld, %s, %#lx, %x, %p, %p, %p, %p.\n", This,
1265 dispIdMember, debugstr_guid(riid),
1266 lcid, wFlags, pDispParams, pVarResult,
1267 pExcepInfo, puArgErr);
1268
1269 /* [out] args can't be null, use dummy vars if needed */
1270 if (!pVarResult) pVarResult = &VarResult;
1271 if (!puArgErr) puArgErr = &uArgErr;
1272 if (!pExcepInfo) pExcepInfo = &ExcepInfo;
1273
1274 /* count by-ref args */
1275 for (cVarRef=0,u=0; u<pDispParams->cArgs; u++) {
1276 VARIANTARG* arg = &pDispParams->rgvarg[u];
1277 if (V_ISBYREF(arg)) {
1278 cVarRef++;
1279 }
1280 }
1281 if (cVarRef) {
1282 rgVarRefIdx = CoTaskMemAlloc(sizeof(UINT)*cVarRef);
1283 rgVarRef = CoTaskMemAlloc(sizeof(VARIANTARG)*cVarRef);
1284 /* make list of by-ref args */
1285 for (cVarRef=0,u=0; u<pDispParams->cArgs; u++) {
1286 VARIANTARG* arg = &pDispParams->rgvarg[u];
1287 if (V_ISBYREF(arg)) {
1288 rgVarRefIdx[cVarRef] = u;
1289 VariantInit(&rgVarRef[cVarRef]);
1290 VariantCopy(&rgVarRef[cVarRef], arg);
1292 cVarRef++;
1293 }
1294 }
1295 } else {
1296 /* [out] args still can't be null,
1297 * but we can point these anywhere in this case,
1298 * since they won't be written to when cVarRef is 0 */
1299 rgVarRefIdx = puArgErr;
1300 rgVarRef = pVarResult;
1301 }
1302 TRACE("passed by ref: %d args\n", cVarRef);
1303 hr = IDispatch_RemoteInvoke_Proxy(This,
1304 dispIdMember,
1305 riid,
1306 lcid,
1307 wFlags,
1308 pDispParams,
1309 pVarResult,
1310 pExcepInfo,
1311 puArgErr,
1312 cVarRef,
1313 rgVarRefIdx,
1314 rgVarRef);
1315 if (cVarRef) {
1316 for (u=0; u<cVarRef; u++) {
1317 unsigned i = rgVarRefIdx[u];
1318 VariantCopy(&pDispParams->rgvarg[i],
1319 &rgVarRef[u]);
1320 VariantClear(&rgVarRef[u]);
1321 }
1322 CoTaskMemFree(rgVarRef);
1323 CoTaskMemFree(rgVarRefIdx);
1324 }
1325
1326 if(pExcepInfo == &ExcepInfo)
1327 {
1328 SysFreeString(pExcepInfo->bstrSource);
1329 SysFreeString(pExcepInfo->bstrDescription);
1330 SysFreeString(pExcepInfo->bstrHelpFile);
1331 }
1332 return hr;
1333}
HRESULT hr
Definition: delayimp.cpp:582
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
LCID lcid
Definition: locale.c:5660
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
unsigned int UINT
Definition: sysinfo.c:13
struct stdole::EXCEPINFO EXCEPINFO
#define V_ISBYREF(A)
Definition: oleauto.h:217
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc)
Definition: variant.c:724
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:626
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:547
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon_undoc.h:337

◆ IDispatch_Invoke_Stub()

HRESULT __RPC_STUB IDispatch_Invoke_Stub ( IDispatch This,
DISPID  dispIdMember,
REFIID  riid,
LCID  lcid,
DWORD  dwFlags,
DISPPARAMS *  pDispParams,
VARIANT pVarResult,
EXCEPINFO *  pExcepInfo,
UINT pArgErr,
UINT  cVarRef,
UINT rgVarRefIdx,
VARIANTARG rgVarRef 
)

Definition at line 1335 of file usrmarshal.c.

1348{
1349 HRESULT hr = S_OK;
1350 VARIANTARG *rgvarg, *arg;
1351 UINT u;
1352
1353 /* initialize out parameters, so that they can be marshalled
1354 * in case the real Invoke doesn't initialize them */
1355 VariantInit(pVarResult);
1356 memset(pExcepInfo, 0, sizeof(*pExcepInfo));
1357 *pArgErr = 0;
1358
1359 /* let the real Invoke operate on a copy of the in parameters,
1360 * so we don't risk losing pointers to allocated memory */
1361 rgvarg = pDispParams->rgvarg;
1362 arg = CoTaskMemAlloc(sizeof(VARIANTARG)*pDispParams->cArgs);
1363 if (!arg) return E_OUTOFMEMORY;
1364
1365 /* init all args so we can call VariantClear on all the args if the copy
1366 * below fails */
1367 for (u = 0; u < pDispParams->cArgs; u++)
1368 VariantInit(&arg[u]);
1369
1370 for (u = 0; u < pDispParams->cArgs; u++) {
1371 hr = VariantCopy(&arg[u], &rgvarg[u]);
1372 if (FAILED(hr))
1373 break;
1374 }
1375
1376 if (SUCCEEDED(hr)) {
1377 /* copy ref args to arg array */
1378 for (u=0; u<cVarRef; u++) {
1379 unsigned i = rgVarRefIdx[u];
1380 VariantCopy(&arg[i], &rgVarRef[u]);
1381 }
1382
1383 pDispParams->rgvarg = arg;
1384
1385 hr = IDispatch_Invoke(This,
1386 dispIdMember,
1387 riid,
1388 lcid,
1389 dwFlags,
1390 pDispParams,
1391 pVarResult,
1392 pExcepInfo,
1393 pArgErr);
1394
1395 /* copy ref args from arg array */
1396 for (u=0; u<cVarRef; u++) {
1397 unsigned i = rgVarRefIdx[u];
1398 VariantCopy(&rgVarRef[u], &arg[i]);
1399 }
1400 }
1401
1402 /* clear the duplicate argument list */
1403 for (u=0; u<pDispParams->cArgs; u++)
1404 VariantClear(&arg[u]);
1405
1406 pDispParams->rgvarg = rgvarg;
1408
1409 return hr;
1410}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
#define memset(x, y, z)
Definition: compat.h:39
void * arg
Definition: msvc.h:10

◆ IEnumConnectionPoints_Next_Proxy()

HRESULT CALLBACK IEnumConnectionPoints_Next_Proxy ( IEnumConnectionPoints This,
ULONG  cConnections,
IConnectionPoint **  ppCP,
ULONG pcFetched 
)

Definition at line 2449 of file usrmarshal.c.

2454{
2455 ULONG fetched;
2456
2457 TRACE("%lu, %p %p.\n", cConnections, ppCP, pcFetched);
2458
2459 if (!pcFetched)
2460 pcFetched = &fetched;
2461
2462 return IEnumConnectionPoints_RemoteNext_Proxy(This, cConnections, ppCP, pcFetched);
2463}

◆ IEnumConnectionPoints_Next_Stub()

HRESULT __RPC_STUB IEnumConnectionPoints_Next_Stub ( IEnumConnectionPoints This,
ULONG  cConnections,
IConnectionPoint **  ppCP,
ULONG pcFetched 
)

Definition at line 2465 of file usrmarshal.c.

2470{
2471 HRESULT hr;
2472
2473 TRACE("%lu, %p, %p.\n", cConnections, ppCP, pcFetched);
2474
2475 *pcFetched = 0;
2476 hr = IEnumConnectionPoints_Next(This, cConnections, ppCP, pcFetched);
2477 if (hr == S_OK)
2478 *pcFetched = cConnections;
2479
2480 return hr;
2481}

◆ IEnumConnections_Next_Proxy()

HRESULT CALLBACK IEnumConnections_Next_Proxy ( IEnumConnections This,
ULONG  cConnections,
LPCONNECTDATA  rgcd,
ULONG pcFetched 
)

Definition at line 2415 of file usrmarshal.c.

2420{
2421 ULONG fetched;
2422
2423 TRACE("%lu, %p, %p.\n", cConnections, rgcd, pcFetched);
2424
2425 if (!pcFetched)
2426 pcFetched = &fetched;
2427
2428 return IEnumConnections_RemoteNext_Proxy(This, cConnections, rgcd, pcFetched);
2429}

◆ IEnumConnections_Next_Stub()

HRESULT __RPC_STUB IEnumConnections_Next_Stub ( IEnumConnections This,
ULONG  cConnections,
LPCONNECTDATA  rgcd,
ULONG pcFetched 
)

Definition at line 2431 of file usrmarshal.c.

2436{
2437 HRESULT hr;
2438
2439 TRACE("%lu, %p, %p.\n", cConnections, rgcd, pcFetched);
2440
2441 *pcFetched = 0;
2442 hr = IEnumConnections_Next(This, cConnections, rgcd, pcFetched);
2443 if (hr == S_OK)
2444 *pcFetched = cConnections;
2445
2446 return hr;
2447}

◆ IEnumOleUndoUnits_Next_Proxy()

HRESULT CALLBACK IEnumOleUndoUnits_Next_Proxy ( IEnumOleUndoUnits This,
ULONG  cElt,
IOleUndoUnit **  rgElt,
ULONG pcEltFetched 
)

Definition at line 2546 of file usrmarshal.c.

2551{
2552 ULONG fetched;
2553
2554 TRACE("%lu, %p %p.\n", cElt, rgElt, pcEltFetched);
2555
2556 if (!pcEltFetched)
2557 pcEltFetched = &fetched;
2558
2559 return IEnumOleUndoUnits_RemoteNext_Proxy(This, cElt, rgElt, pcEltFetched);
2560}

◆ IEnumOleUndoUnits_Next_Stub()

HRESULT __RPC_STUB IEnumOleUndoUnits_Next_Stub ( IEnumOleUndoUnits This,
ULONG  cElt,
IOleUndoUnit **  rgElt,
ULONG pcEltFetched 
)

Definition at line 2562 of file usrmarshal.c.

2567{
2568 HRESULT hr;
2569
2570 TRACE("%lu, %p, %p.\n", cElt, rgElt, pcEltFetched);
2571
2572 *pcEltFetched = 0;
2573 hr = IEnumOleUndoUnits_Next(This, cElt, rgElt, pcEltFetched);
2574 if (hr == S_OK)
2575 *pcEltFetched = cElt;
2576
2577 return hr;
2578}

◆ IEnumVARIANT_Next_Proxy()

HRESULT CALLBACK IEnumVARIANT_Next_Proxy ( IEnumVARIANT This,
ULONG  celt,
VARIANT rgVar,
ULONG pCeltFetched 
)

Definition at line 1414 of file usrmarshal.c.

1419{
1420 ULONG fetched;
1421 if (!pCeltFetched)
1422 pCeltFetched = &fetched;
1423 return IEnumVARIANT_RemoteNext_Proxy(This,
1424 celt,
1425 rgVar,
1426 pCeltFetched);
1427}

◆ IEnumVARIANT_Next_Stub()

HRESULT __RPC_STUB IEnumVARIANT_Next_Stub ( IEnumVARIANT This,
ULONG  celt,
VARIANT rgVar,
ULONG pCeltFetched 
)

Definition at line 1429 of file usrmarshal.c.

1434{
1435 HRESULT hr;
1436 *pCeltFetched = 0;
1437 hr = IEnumVARIANT_Next(This,
1438 celt,
1439 rgVar,
1440 pCeltFetched);
1441 if (hr == S_OK) *pCeltFetched = celt;
1442 return hr;
1443}

◆ interface_user_marshal()

static unsigned char * interface_user_marshal ( ULONG pFlags,
unsigned char Buffer,
REFIID  riid,
IUnknown punk 
)
static

Definition at line 325 of file usrmarshal.c.

327{
328 TRACE("%#lx, %p, %p.\n", *pFlags, Buffer, punk);
329
330 /* first DWORD is used to store pointer itself, truncated on win64 */
331 if(!punk)
332 {
333 memset(Buffer, 0, sizeof(ULONG));
334 return Buffer + sizeof(ULONG);
335 }
336 else
337 {
339 Buffer += sizeof(DWORD);
340 }
341
342 return WdtpInterfacePointer_UserMarshal(pFlags, LOWORD(*pFlags), Buffer, punk, riid);
343}
unsigned char *WINAPI WdtpInterfacePointer_UserMarshal(ULONG *pFlags, ULONG RealFlags, unsigned char *pBuffer, IUnknown *punk, REFIID riid)
Definition: usrmarshal.c:917
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
uint32_t DWORD_PTR
Definition: typedefs.h:65

Referenced by LPSAFEARRAY_UserMarshal(), and VARIANT_UserMarshal().

◆ interface_user_size()

static unsigned interface_user_size ( ULONG pFlags,
ULONG  Start,
REFIID  riid,
IUnknown punk 
)
static

Definition at line 269 of file usrmarshal.c.

270{
271 ULONG size = 0;
272
273 if (punk)
274 {
275 size = WdtpInterfacePointer_UserSize(pFlags, LOWORD(*pFlags), 0, punk, riid);
276 if (!size)
277 {
278 ERR("interface variant buffer size calculation failed\n");
279 return 0;
280 }
281 }
282 size += sizeof(ULONG);
283 TRACE("wire-size extra of interface variant is %ld.\n", size);
284 return Start + size;
285}
ULONG __RPC_USER WdtpInterfacePointer_UserSize(ULONG *pFlags, ULONG RealFlags, ULONG StartingSize, IUnknown *punk, REFIID riid)
Definition: usrmarshal.c:882

Referenced by LPSAFEARRAY_UserSize(), and wire_extra_user_size().

◆ interface_user_unmarshal()

static unsigned char * interface_user_unmarshal ( ULONG pFlags,
unsigned char Buffer,
REFIID  riid,
IUnknown **  ppunk 
)
static

Definition at line 346 of file usrmarshal.c.

348{
349 DWORD ptr;
350
351 TRACE("%#lx, %p, %p.\n", *pFlags, Buffer, ppunk);
352
353 /* skip pointer part itself */
354 ptr = *(DWORD*)Buffer;
355 Buffer += sizeof(DWORD);
356
357 if(!ptr)
358 return Buffer;
359
360 return WdtpInterfacePointer_UserUnmarshal(pFlags, Buffer, ppunk, riid);
361}
unsigned char *WINAPI WdtpInterfacePointer_UserUnmarshal(ULONG *pFlags, unsigned char *pBuffer, IUnknown **ppunk, REFIID riid)
Definition: usrmarshal.c:974
static PVOID ptr
Definition: dispmode.c:27

Referenced by LPSAFEARRAY_UserUnmarshal(), and VARIANT_UserUnmarshal().

◆ IPersistMemory_Load_Proxy()

HRESULT CALLBACK IPersistMemory_Load_Proxy ( IPersistMemory This,
LPVOID  pMem,
ULONG  cbSize 
)

Definition at line 2483 of file usrmarshal.c.

2487{
2488 TRACE("%p, %lu.\n", pMem, cbSize);
2489
2490 if (!pMem)
2491 return E_POINTER;
2492
2493 return IPersistMemory_RemoteLoad_Proxy(This, pMem, cbSize);
2494}
#define E_POINTER
Definition: winerror.h:3480

◆ IPersistMemory_Load_Stub()

HRESULT __RPC_STUB IPersistMemory_Load_Stub ( IPersistMemory This,
BYTE pMem,
ULONG  cbSize 
)

Definition at line 2496 of file usrmarshal.c.

2500{
2501 TRACE("%p, %lu.\n", pMem, cbSize);
2502 return IPersistMemory_Load(This, pMem, cbSize);
2503}

◆ IPersistMemory_Save_Proxy()

HRESULT CALLBACK IPersistMemory_Save_Proxy ( IPersistMemory This,
LPVOID  pMem,
BOOL  fClearDirty,
ULONG  cbSize 
)

Definition at line 2505 of file usrmarshal.c.

2510{
2511 TRACE("%p, %d, %lu.\n", pMem, fClearDirty, cbSize);
2512
2513 if (!pMem)
2514 return E_POINTER;
2515
2516 return IPersistMemory_RemoteSave_Proxy(This, pMem, fClearDirty, cbSize);
2517}

◆ IPersistMemory_Save_Stub()

HRESULT __RPC_STUB IPersistMemory_Save_Stub ( IPersistMemory This,
BYTE pMem,
BOOL  fClearDirty,
ULONG  cbSize 
)

Definition at line 2519 of file usrmarshal.c.

2524{
2525 TRACE("%p, %d, %lu.\n", pMem, fClearDirty, cbSize);
2526 return IPersistMemory_Save(This, pMem, fClearDirty, cbSize);
2527}

◆ IPropertyBag_Read_Proxy()

HRESULT CALLBACK IPropertyBag_Read_Proxy ( IPropertyBag This,
LPCOLESTR  pszPropName,
VARIANT pVar,
IErrorLog pErrorLog 
)

Definition at line 2295 of file usrmarshal.c.

2300{
2301 IUnknown *pUnk = NULL;
2302 TRACE("(%p, %s, %p, %p)\n", This, debugstr_w(pszPropName), pVar, pErrorLog);
2303
2304 if(!pVar)
2305 return E_POINTER;
2306
2307 if(V_VT(pVar) & (VT_BYREF | VT_ARRAY | VT_VECTOR))
2308 {
2309 FIXME("Variant type %x is byref, array or vector. Not implemented.\n", V_VT(pVar));
2310 return E_NOTIMPL;
2311 }
2312
2313 switch(V_VT(pVar))
2314 {
2315 case VT_DISPATCH:
2316 pUnk = (IUnknown*)V_DISPATCH(pVar);
2317 break;
2318 case VT_UNKNOWN:
2319 pUnk = V_UNKNOWN(pVar);
2320 break;
2321 case VT_SAFEARRAY:
2322 FIXME("Safearray support not yet implemented.\n");
2323 return E_NOTIMPL;
2324 default:
2325 FIXME("Unknown V_VT %d - support not yet implemented.\n", V_VT(pVar));
2326 return E_NOTIMPL;
2327 }
2328
2329 return IPropertyBag_RemoteRead_Proxy(This, pszPropName, pVar, pErrorLog,
2330 V_VT(pVar), pUnk);
2331}
#define E_NOTIMPL
Definition: ddrawi.h:99
@ VT_VECTOR
Definition: compat.h:2340
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
#define V_UNKNOWN(A)
Definition: oleauto.h:281
#define V_VT(A)
Definition: oleauto.h:211
#define V_DISPATCH(A)
Definition: oleauto.h:239

◆ IPropertyBag_Read_Stub()

HRESULT __RPC_STUB IPropertyBag_Read_Stub ( IPropertyBag This,
LPCOLESTR  pszPropName,
VARIANT pVar,
IErrorLog pErrorLog,
DWORD  varType,
IUnknown pUnkObj 
)

Definition at line 2333 of file usrmarshal.c.

2340{
2341 IDispatch *disp;
2342 HRESULT hr;
2343
2344 TRACE("%p, %s, %p, %p, %lx, %p.\n", This, debugstr_w(pszPropName), pVar,
2345 pErrorLog, varType, pUnkObj);
2346
2347 if(varType & (VT_BYREF | VT_ARRAY | VT_VECTOR))
2348 {
2349 FIXME("Variant type %x is byref, array or vector. Not implemented.\n", V_VT(pVar));
2350 return E_NOTIMPL;
2351 }
2352
2353 V_VT(pVar) = varType;
2354 switch(varType)
2355 {
2356 case VT_DISPATCH:
2357 hr = IUnknown_QueryInterface(pUnkObj, &IID_IDispatch, (LPVOID*)&disp);
2358 if(FAILED(hr))
2359 return hr;
2360 IUnknown_Release(pUnkObj);
2361 V_DISPATCH(pVar) = disp;
2362 break;
2363 case VT_UNKNOWN:
2364 V_UNKNOWN(pVar) = pUnkObj;
2365 break;
2366 case VT_BSTR:
2367 V_BSTR(pVar) = SysAllocString(L"");
2368 break;
2369 case VT_SAFEARRAY:
2370 FIXME("Safearray support not yet implemented.\n");
2371 return E_NOTIMPL;
2372 default:
2373 break;
2374 }
2375 hr = IPropertyBag_Read(This, pszPropName, pVar, pErrorLog);
2376 if(FAILED(hr))
2377 VariantClear(pVar);
2378
2379 return hr;
2380}
#define L(x)
Definition: resources.c:13
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:240
#define V_BSTR(A)
Definition: oleauto.h:226
const GUID IID_IDispatch

◆ IQuickActivate_QuickActivate_Proxy()

HRESULT CALLBACK IQuickActivate_QuickActivate_Proxy ( IQuickActivate This,
QACONTAINER *  pQaContainer,
QACONTROL *  pQaControl 
)

Definition at line 2580 of file usrmarshal.c.

2584{
2585 FIXME("not implemented\n");
2586 return E_NOTIMPL;
2587}

◆ IQuickActivate_QuickActivate_Stub()

HRESULT __RPC_STUB IQuickActivate_QuickActivate_Stub ( IQuickActivate This,
QACONTAINER *  pQaContainer,
QACONTROL *  pQaControl 
)

Definition at line 2589 of file usrmarshal.c.

2593{
2594 FIXME("not implemented\n");
2595 return E_NOTIMPL;
2596}

◆ ITypeComp_Bind_Proxy()

HRESULT CALLBACK ITypeComp_Bind_Proxy ( ITypeComp This,
LPOLESTR  name,
ULONG  lHashVal,
WORD  flags,
ITypeInfo **  ti,
DESCKIND *  desckind,
BINDPTR *  bindptr 
)

Definition at line 1489 of file usrmarshal.c.

1497{
1498 CLEANLOCALSTORAGE stg = { 0 };
1499 ITypeComp *typecomp;
1500 FUNCDESC *funcdesc;
1501 VARDESC *vardesc;
1502 HRESULT hr;
1503
1504 TRACE("%p, %s, %#lx, %#x, %p, %p, %p.\n", This, debugstr_w(name), lHashVal, flags, ti,
1505 desckind, bindptr);
1506
1507 *desckind = DESCKIND_NONE;
1508 memset(bindptr, 0, sizeof(*bindptr));
1509
1510 hr = ITypeComp_RemoteBind_Proxy(This, name, lHashVal, flags, ti, desckind,
1511 &funcdesc, &vardesc, &typecomp, &stg);
1512
1513 if (hr == S_OK)
1514 {
1515 switch (*desckind)
1516 {
1517 case DESCKIND_FUNCDESC:
1518 bindptr->lpfuncdesc = funcdesc;
1519 break;
1520 case DESCKIND_VARDESC:
1521 case DESCKIND_IMPLICITAPPOBJ:
1522 bindptr->lpvardesc = vardesc;
1523 break;
1524 case DESCKIND_TYPECOMP:
1525 bindptr->lptcomp = typecomp;
1526 break;
1527 default:
1528 ;
1529 }
1530 }
1531
1532 return hr;
1533}
GLbitfield flags
Definition: glext.h:7161
Definition: name.c:39

◆ ITypeComp_Bind_Stub()

HRESULT __RPC_STUB ITypeComp_Bind_Stub ( ITypeComp This,
LPOLESTR  name,
ULONG  lHashVal,
WORD  flags,
ITypeInfo **  ti,
DESCKIND *  desckind,
FUNCDESC **  funcdesc,
VARDESC **  vardesc,
ITypeComp **  typecomp,
CLEANLOCALSTORAGE *  stg 
)

Definition at line 1535 of file usrmarshal.c.

1546{
1547 BINDPTR bindptr;
1548 HRESULT hr;
1549
1550 TRACE("%p, %s, %#lx, %#x, %p, %p, %p, %p, %p, %p.\n", This, debugstr_w(name),
1551 lHashVal, flags, ti, desckind, funcdesc, vardesc, typecomp, stg);
1552
1553 memset(stg, 0, sizeof(*stg));
1554 memset(&bindptr, 0, sizeof(bindptr));
1555
1556 *funcdesc = NULL;
1557 *vardesc = NULL;
1558 *typecomp = NULL;
1559 *ti = NULL;
1560
1561 hr = ITypeComp_Bind(This, name, lHashVal, flags, ti, desckind, &bindptr);
1562 if(hr != S_OK)
1563 return hr;
1564
1565 switch (*desckind)
1566 {
1567 case DESCKIND_FUNCDESC:
1568 *funcdesc = bindptr.lpfuncdesc;
1569 stg->pInterface = (IUnknown*)*ti;
1570 stg->pStorage = funcdesc;
1571 stg->flags = CLS_FUNCDESC;
1572 break;
1573 case DESCKIND_VARDESC:
1574 case DESCKIND_IMPLICITAPPOBJ:
1575 *vardesc = bindptr.lpvardesc;
1576 stg->pInterface = (IUnknown*)*ti;
1577 stg->pStorage = vardesc;
1578 stg->flags = CLS_VARDESC;
1579 break;
1580 case DESCKIND_TYPECOMP:
1581 *typecomp = bindptr.lptcomp;
1582 break;
1583 default:
1584 ;
1585 }
1586
1587 if (stg->pInterface)
1588 IUnknown_AddRef(stg->pInterface);
1589
1590 return hr;
1591}

◆ ITypeComp_BindType_Proxy()

HRESULT CALLBACK ITypeComp_BindType_Proxy ( ITypeComp This,
LPOLESTR  name,
ULONG  lHashVal,
ITypeInfo **  ti,
ITypeComp **  typecomp 
)

Definition at line 1593 of file usrmarshal.c.

1599{
1600 HRESULT hr;
1601
1602 TRACE("%p, %s, %#lx, %p, %p.\n", This, debugstr_w(name), lHashVal, ti, typecomp);
1603
1604 hr = ITypeComp_RemoteBindType_Proxy(This, name, lHashVal, ti);
1605 if (hr == S_OK)
1606 ITypeInfo_GetTypeComp(*ti, typecomp);
1607 else if (typecomp)
1608 *typecomp = NULL;
1609
1610 return hr;
1611}

◆ ITypeComp_BindType_Stub()

HRESULT __RPC_STUB ITypeComp_BindType_Stub ( ITypeComp This,
LPOLESTR  name,
ULONG  lHashVal,
ITypeInfo **  ti 
)

Definition at line 1613 of file usrmarshal.c.

1618{
1619 ITypeComp *typecomp = NULL;
1620 HRESULT hr;
1621
1622 TRACE("%p, %s, %#lx, %p.\n", This, debugstr_w(name), lHashVal, ti);
1623
1624 hr = ITypeComp_BindType(This, name, lHashVal, ti, &typecomp);
1625
1626 if (typecomp)
1627 ITypeComp_Release(typecomp);
1628
1629 return hr;
1630}

◆ ITypeInfo2_GetDocumentation2_Proxy()

HRESULT CALLBACK ITypeInfo2_GetDocumentation2_Proxy ( ITypeInfo2 This,
MEMBERID  memid,
LCID  lcid,
BSTR help_string,
DWORD help_context,
BSTR help_dll 
)

Definition at line 2028 of file usrmarshal.c.

2031{
2032 DWORD dummy_help_context, flags = 0;
2033 BSTR dummy_help_string, dummy_help_dll;
2034 HRESULT hr;
2035
2036 TRACE("%p, %#lx, %#lx, %p, %p, %p.\n", This, memid, lcid, help_string, help_context, help_dll);
2037
2038 if(!help_string) help_string = &dummy_help_string;
2039 else flags = 1;
2040
2041 if(!help_context) help_context = &dummy_help_context;
2042 else flags |= 2;
2043
2044 if(!help_dll) help_dll = &dummy_help_dll;
2045 else flags |= 4;
2046
2047 hr = ITypeInfo2_RemoteGetDocumentation2_Proxy(This, memid, lcid, flags, help_string, help_context, help_dll);
2048
2049 /* We don't need to free the dummy BSTRs since the stub ensures that these will be NULLs. */
2050
2051 return hr;
2052}

◆ ITypeInfo2_GetDocumentation2_Stub()

HRESULT __RPC_STUB ITypeInfo2_GetDocumentation2_Stub ( ITypeInfo2 This,
MEMBERID  memid,
LCID  lcid,
DWORD  flags,
BSTR help_string,
DWORD help_context,
BSTR help_dll 
)

Definition at line 2054 of file usrmarshal.c.

2058{
2059 TRACE("%p, %#lx, %#lx, %#lx, %p, %p, %p.\n", This, memid, lcid, flags, help_string, help_context, help_dll);
2060
2061 *help_string = *help_dll = NULL;
2062 *help_context = 0;
2063
2064 if(!(flags & 1)) help_string = NULL;
2065 if(!(flags & 2)) help_context = NULL;
2066 if(!(flags & 4)) help_dll = NULL;
2067
2068 return ITypeInfo2_GetDocumentation2(This, memid, lcid, help_string, help_context, help_dll);
2069}

◆ ITypeInfo_AddressOfMember_Proxy()

HRESULT CALLBACK ITypeInfo_AddressOfMember_Proxy ( ITypeInfo This,
MEMBERID  memid,
INVOKEKIND  invKind,
PVOID ppv 
)

Definition at line 1890 of file usrmarshal.c.

1895{
1896 FIXME("not implemented\n");
1897 return E_FAIL;
1898}
#define E_FAIL
Definition: ddrawi.h:102

◆ ITypeInfo_AddressOfMember_Stub()

HRESULT __RPC_STUB ITypeInfo_AddressOfMember_Stub ( ITypeInfo This)

Definition at line 1900 of file usrmarshal.c.

1902{
1903 FIXME("not implemented\n");
1904 return E_FAIL;
1905}

◆ ITypeInfo_CreateInstance_Proxy()

HRESULT CALLBACK ITypeInfo_CreateInstance_Proxy ( ITypeInfo This,
IUnknown pUnkOuter,
REFIID  riid,
PVOID ppvObj 
)

Definition at line 1907 of file usrmarshal.c.

1912{
1913 FIXME("not implemented\n");
1914 return E_FAIL;
1915}

◆ ITypeInfo_CreateInstance_Stub()

HRESULT __RPC_STUB ITypeInfo_CreateInstance_Stub ( ITypeInfo This,
REFIID  riid,
IUnknown **  ppvObj 
)

Definition at line 1917 of file usrmarshal.c.

1921{
1922 FIXME("not implemented\n");
1923 return E_FAIL;
1924}

◆ ITypeInfo_GetContainingTypeLib_Proxy()

HRESULT CALLBACK ITypeInfo_GetContainingTypeLib_Proxy ( ITypeInfo This,
ITypeLib **  ppTLib,
UINT pIndex 
)

Definition at line 1926 of file usrmarshal.c.

1930{
1931 ITypeLib *pTL;
1932 UINT index;
1933 HRESULT hr;
1934
1935 TRACE("(%p, %p, %p)\n", This, ppTLib, pIndex );
1936
1937 hr = ITypeInfo_RemoteGetContainingTypeLib_Proxy(This, &pTL, &index);
1938 if(SUCCEEDED(hr))
1939 {
1940 if(pIndex)
1941 *pIndex = index;
1942
1943 if(ppTLib)
1944 *ppTLib = pTL;
1945 else
1946 ITypeLib_Release(pTL);
1947 }
1948 return hr;
1949}
#define index(s, c)
Definition: various.h:29
GLuint index
Definition: glext.h:6031
_Out_ PULONG _Out_ PULONG pIndex
Definition: ndis.h:4565

◆ ITypeInfo_GetContainingTypeLib_Stub()

HRESULT __RPC_STUB ITypeInfo_GetContainingTypeLib_Stub ( ITypeInfo This,
ITypeLib **  ppTLib,
UINT pIndex 
)

Definition at line 1951 of file usrmarshal.c.

1955{
1956 TRACE("(%p, %p, %p)\n", This, ppTLib, pIndex );
1957 return ITypeInfo_GetContainingTypeLib(This, ppTLib, pIndex);
1958}

◆ ITypeInfo_GetDllEntry_Proxy()

HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy ( ITypeInfo This,
MEMBERID  memid,
INVOKEKIND  invkind,
BSTR dll_name,
BSTR name,
WORD ordinal 
)

Definition at line 1846 of file usrmarshal.c.

1849{
1850 DWORD flags = 0;
1851 BSTR dummy_dll_name, dummy_name;
1852 WORD dummy_ordinal;
1853 HRESULT hr;
1854
1855 TRACE("%p, %#lx, %#x, %p, %p, %p.\n", This, memid, invkind, dll_name, name, ordinal);
1856
1857 if(!dll_name) dll_name = &dummy_dll_name;
1858 else flags = 1;
1859
1860 if(!name) name = &dummy_name;
1861 else flags |= 2;
1862
1863 if(!ordinal) ordinal = &dummy_ordinal;
1864 else flags |= 4;
1865
1866 hr = ITypeInfo_RemoteGetDllEntry_Proxy(This, memid, invkind, flags, dll_name, name, ordinal);
1867
1868 /* We don't need to free the dummy BSTRs since the stub ensures that these will be NULLs. */
1869
1870 return hr;
1871}
unsigned short WORD
Definition: ntddk_ex.h:93

◆ ITypeInfo_GetDllEntry_Stub()

HRESULT __RPC_STUB ITypeInfo_GetDllEntry_Stub ( ITypeInfo This,
MEMBERID  memid,
INVOKEKIND  invkind,
DWORD  flags,
BSTR dll_name,
BSTR name,
WORD ordinal 
)

Definition at line 1873 of file usrmarshal.c.

1877{
1878 TRACE("%p, %#lx, %x, %p, %p, %p.\n", This, memid, invkind, dll_name, name, ordinal);
1879
1880 *dll_name = *name = NULL;
1881 *ordinal = 0;
1882
1883 if(!(flags & 1)) dll_name = NULL;
1884 if(!(flags & 2)) name = NULL;
1885 if(!(flags & 4)) ordinal = NULL;
1886
1887 return ITypeInfo_GetDllEntry(This, memid, invkind, dll_name, name, ordinal);
1888}

◆ ITypeInfo_GetDocumentation_Proxy()

HRESULT CALLBACK ITypeInfo_GetDocumentation_Proxy ( ITypeInfo This,
MEMBERID  memid,
BSTR name,
BSTR doc_string,
DWORD help_context,
BSTR help_file 
)

Definition at line 1800 of file usrmarshal.c.

1803{
1804 DWORD dummy_help_context, flags = 0;
1805 BSTR dummy_name, dummy_doc_string, dummy_help_file;
1806 HRESULT hr;
1807
1808 TRACE("%p, %#lx, %p, %p, %p, %p.\n", This, memid, name, doc_string, help_context, help_file);
1809
1810 if(!name) name = &dummy_name;
1811 else flags = 1;
1812
1813 if(!doc_string) doc_string = &dummy_doc_string;
1814 else flags |= 2;
1815
1816 if(!help_context) help_context = &dummy_help_context;
1817 else flags |= 4;
1818
1819 if(!help_file) help_file = &dummy_help_file;
1820 else flags |= 8;
1821
1822 hr = ITypeInfo_RemoteGetDocumentation_Proxy(This, memid, flags, name, doc_string, help_context, help_file);
1823
1824 /* We don't need to free the dummy BSTRs since the stub ensures that these will be NULLs. */
1825
1826 return hr;
1827}

◆ ITypeInfo_GetDocumentation_Stub()

HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub ( ITypeInfo This,
MEMBERID  memid,
DWORD  flags,
BSTR name,
BSTR doc_string,
DWORD help_context,
BSTR help_file 
)

Definition at line 1829 of file usrmarshal.c.

1832{
1833 TRACE("%p, %#lx, %#lx, %p, %p, %p, %p.\n", This, memid, flags, name, doc_string, help_context, help_file);
1834
1835 *name = *doc_string = *help_file = NULL;
1836 *help_context = 0;
1837
1838 if(!(flags & 1)) name = NULL;
1839 if(!(flags & 2)) doc_string = NULL;
1840 if(!(flags & 4)) help_context = NULL;
1841 if(!(flags & 8)) help_file = NULL;
1842
1843 return ITypeInfo_GetDocumentation(This, memid, name, doc_string, help_context, help_file);
1844}

◆ ITypeInfo_GetFuncDesc_Proxy()

HRESULT CALLBACK ITypeInfo_GetFuncDesc_Proxy ( ITypeInfo This,
UINT  index,
FUNCDESC **  ppFuncDesc 
)

Definition at line 1668 of file usrmarshal.c.

1672{
1673 CLEANLOCALSTORAGE stg;
1674 TRACE("(%p, %d, %p)\n", This, index, ppFuncDesc);
1675
1676 stg.flags = 0;
1677 stg.pStorage = NULL;
1678 stg.pInterface = NULL;
1679
1680 return ITypeInfo_RemoteGetFuncDesc_Proxy(This, index, ppFuncDesc, &stg);
1681}

◆ ITypeInfo_GetFuncDesc_Stub()

HRESULT __RPC_STUB ITypeInfo_GetFuncDesc_Stub ( ITypeInfo This,
UINT  index,
LPFUNCDESC *  ppFuncDesc,
CLEANLOCALSTORAGE *  pDummy 
)

Definition at line 1683 of file usrmarshal.c.

1688{
1689 HRESULT hr;
1690 TRACE("(%p, %d, %p)\n", This, index, ppFuncDesc);
1691
1692 hr = ITypeInfo_GetFuncDesc(This, index, ppFuncDesc);
1693 if(hr != S_OK)
1694 return hr;
1695
1696 pDummy->flags = CLS_FUNCDESC;
1697 ITypeInfo_AddRef(This);
1698 pDummy->pInterface = (IUnknown*)This;
1699 pDummy->pStorage = ppFuncDesc;
1700 return hr;
1701}

◆ ITypeInfo_GetIDsOfNames_Proxy()

HRESULT CALLBACK ITypeInfo_GetIDsOfNames_Proxy ( ITypeInfo This,
LPOLESTR *  rgszNames,
UINT  cNames,
MEMBERID *  pMemId 
)

Definition at line 1762 of file usrmarshal.c.

1767{
1768 FIXME("not implemented\n");
1769 return E_FAIL;
1770}

◆ ITypeInfo_GetIDsOfNames_Stub()

HRESULT __RPC_STUB ITypeInfo_GetIDsOfNames_Stub ( ITypeInfo This)

Definition at line 1772 of file usrmarshal.c.

1774{
1775 FIXME("not implemented\n");
1776 return E_FAIL;
1777}

◆ ITypeInfo_GetNames_Proxy()

HRESULT CALLBACK ITypeInfo_GetNames_Proxy ( ITypeInfo This,
MEMBERID  memid,
BSTR rgBstrNames,
UINT  cMaxNames,
UINT pcNames 
)

Definition at line 1738 of file usrmarshal.c.

1744{
1745 TRACE("%p, %#lx, %p, %d, %p.\n", This, memid, rgBstrNames, cMaxNames, pcNames);
1746
1747 return ITypeInfo_RemoteGetNames_Proxy(This, memid, rgBstrNames, cMaxNames, pcNames);
1748}

◆ ITypeInfo_GetNames_Stub()

HRESULT __RPC_STUB ITypeInfo_GetNames_Stub ( ITypeInfo This,
MEMBERID  memid,
BSTR rgBstrNames,
UINT  cMaxNames,
UINT pcNames 
)

Definition at line 1750 of file usrmarshal.c.

1756{
1757 TRACE("%p, %#lx, %p, %d, %p.\n", This, memid, rgBstrNames, cMaxNames, pcNames);
1758
1759 return ITypeInfo_GetNames(This, memid, rgBstrNames, cMaxNames, pcNames);
1760}

◆ ITypeInfo_GetTypeAttr_Proxy()

HRESULT CALLBACK ITypeInfo_GetTypeAttr_Proxy ( ITypeInfo This,
TYPEATTR **  ppTypeAttr 
)

Definition at line 1634 of file usrmarshal.c.

1638{
1639 CLEANLOCALSTORAGE stg;
1640 TRACE("(%p, %p)\n", This, ppTypeAttr);
1641
1642 stg.flags = 0;
1643 stg.pStorage = NULL;
1644 stg.pInterface = NULL;
1645
1646 return ITypeInfo_RemoteGetTypeAttr_Proxy(This, ppTypeAttr, &stg);
1647}

◆ ITypeInfo_GetTypeAttr_Stub()

HRESULT __RPC_STUB ITypeInfo_GetTypeAttr_Stub ( ITypeInfo This,
LPTYPEATTR *  ppTypeAttr,
CLEANLOCALSTORAGE *  pDummy 
)

Definition at line 1649 of file usrmarshal.c.

1653{
1654 HRESULT hr;
1655 TRACE("(%p, %p)\n", This, ppTypeAttr);
1656
1657 hr = ITypeInfo_GetTypeAttr(This, ppTypeAttr);
1658 if(hr != S_OK)
1659 return hr;
1660
1661 pDummy->flags = CLS_TYPEATTR;
1662 ITypeInfo_AddRef(This);
1663 pDummy->pInterface = (IUnknown*)This;
1664 pDummy->pStorage = ppTypeAttr;
1665 return hr;
1666}

◆ ITypeInfo_GetVarDesc_Proxy()

HRESULT CALLBACK ITypeInfo_GetVarDesc_Proxy ( ITypeInfo This,
UINT  index,
VARDESC **  ppVarDesc 
)

Definition at line 1703 of file usrmarshal.c.

1707{
1708 CLEANLOCALSTORAGE stg;
1709 TRACE("(%p, %d, %p)\n", This, index, ppVarDesc);
1710
1711 stg.flags = 0;
1712 stg.pStorage = NULL;
1713 stg.pInterface = NULL;
1714
1715 return ITypeInfo_RemoteGetVarDesc_Proxy(This, index, ppVarDesc, &stg);
1716}

◆ ITypeInfo_GetVarDesc_Stub()

HRESULT __RPC_STUB ITypeInfo_GetVarDesc_Stub ( ITypeInfo This,
UINT  index,
LPVARDESC *  ppVarDesc,
CLEANLOCALSTORAGE *  pDummy 
)

Definition at line 1718 of file usrmarshal.c.

1723{
1724 HRESULT hr;
1725 TRACE("(%p, %d, %p)\n", This, index, ppVarDesc);
1726
1727 hr = ITypeInfo_GetVarDesc(This, index, ppVarDesc);
1728 if(hr != S_OK)
1729 return hr;
1730
1731 pDummy->flags = CLS_VARDESC;
1732 ITypeInfo_AddRef(This);
1733 pDummy->pInterface = (IUnknown*)This;
1734 pDummy->pStorage = ppVarDesc;
1735 return hr;
1736}

◆ ITypeInfo_Invoke_Proxy()

HRESULT CALLBACK ITypeInfo_Invoke_Proxy ( ITypeInfo This,
PVOID  pvInstance,
MEMBERID  memid,
WORD  wFlags,
DISPPARAMS *  pDispParams,
VARIANT pVarResult,
EXCEPINFO *  pExcepInfo,
UINT puArgErr 
)

Definition at line 1779 of file usrmarshal.c.

1788{
1789 FIXME("not implemented\n");
1790 return E_FAIL;
1791}

◆ ITypeInfo_Invoke_Stub()

HRESULT __RPC_STUB ITypeInfo_Invoke_Stub ( ITypeInfo This)

Definition at line 1793 of file usrmarshal.c.

1795{
1796 FIXME("not implemented\n");
1797 return E_FAIL;
1798}

◆ ITypeInfo_ReleaseFuncDesc_Proxy()

void CALLBACK ITypeInfo_ReleaseFuncDesc_Proxy ( ITypeInfo This,
FUNCDESC *  pFuncDesc 
)

Definition at line 1976 of file usrmarshal.c.

1979{
1980 SHORT param;
1981 TRACE("(%p, %p)\n", This, pFuncDesc);
1982
1983 for(param = 0; param < pFuncDesc->cParams; param++)
1984 free_embedded_elemdesc(pFuncDesc->lprgelemdescParam + param);
1985 if(param)
1986 CoTaskMemFree(pFuncDesc->lprgelemdescParam);
1987
1988 free_embedded_elemdesc(&pFuncDesc->elemdescFunc);
1989
1990 if(pFuncDesc->cScodes != 0 && pFuncDesc->cScodes != -1)
1991 CoTaskMemFree(pFuncDesc->lprgscode);
1992
1993 CoTaskMemFree(pFuncDesc);
1994}
static void free_embedded_elemdesc(ELEMDESC *edesc)
Definition: usrmarshal.c:1480
GLfloat param
Definition: glext.h:5796

◆ ITypeInfo_ReleaseFuncDesc_Stub()

HRESULT __RPC_STUB ITypeInfo_ReleaseFuncDesc_Stub ( ITypeInfo This)

Definition at line 1996 of file usrmarshal.c.

1998{
1999 TRACE("nothing to do\n");
2000 return S_OK;
2001}

◆ ITypeInfo_ReleaseTypeAttr_Proxy()

void CALLBACK ITypeInfo_ReleaseTypeAttr_Proxy ( ITypeInfo This,
TYPEATTR *  pTypeAttr 
)

Definition at line 1960 of file usrmarshal.c.

1963{
1964 TRACE("(%p, %p)\n", This, pTypeAttr);
1965 free_embedded_typedesc(&pTypeAttr->tdescAlias);
1966 CoTaskMemFree(pTypeAttr);
1967}

◆ ITypeInfo_ReleaseTypeAttr_Stub()

HRESULT __RPC_STUB ITypeInfo_ReleaseTypeAttr_Stub ( ITypeInfo This)

Definition at line 1969 of file usrmarshal.c.

1971{
1972 TRACE("nothing to do\n");
1973 return S_OK;
1974}

◆ ITypeInfo_ReleaseVarDesc_Proxy()

void CALLBACK ITypeInfo_ReleaseVarDesc_Proxy ( ITypeInfo This,
VARDESC *  pVarDesc 
)

Definition at line 2003 of file usrmarshal.c.

2006{
2007 TRACE("(%p, %p)\n", This, pVarDesc);
2008
2009 CoTaskMemFree(pVarDesc->lpstrSchema);
2010
2011 if(pVarDesc->varkind == VAR_CONST)
2012 CoTaskMemFree(pVarDesc->lpvarValue);
2013
2014 free_embedded_elemdesc(&pVarDesc->elemdescVar);
2015 CoTaskMemFree(pVarDesc);
2016}

◆ ITypeInfo_ReleaseVarDesc_Stub()

HRESULT __RPC_STUB ITypeInfo_ReleaseVarDesc_Stub ( ITypeInfo This)

Definition at line 2018 of file usrmarshal.c.

2020{
2021 TRACE("nothing to do\n");
2022 return S_OK;
2023}

◆ ITypeLib2_GetDocumentation2_Proxy()

HRESULT CALLBACK ITypeLib2_GetDocumentation2_Proxy ( ITypeLib2 This,
INT  index,
LCID  lcid,
BSTR help_string,
DWORD help_context,
BSTR help_dll 
)

Definition at line 2253 of file usrmarshal.c.

2256{
2257 DWORD dummy_help_context, flags = 0;
2258 BSTR dummy_help_string, dummy_help_dll;
2259 HRESULT hr;
2260
2261 TRACE("%p, %d, %#lx, %p, %p, %p.\n", This, index, lcid, help_string, help_context, help_dll);
2262
2263 if(!help_string) help_string = &dummy_help_string;
2264 else flags = 1;
2265
2266 if(!help_context) help_context = &dummy_help_context;
2267 else flags |= 2;
2268
2269 if(!help_dll) help_dll = &dummy_help_dll;
2270 else flags |= 4;
2271
2272 hr = ITypeLib2_RemoteGetDocumentation2_Proxy(This, index, lcid, flags, help_string, help_context, help_dll);
2273
2274 /* We don't need to free the dummy BSTRs since the stub ensures that these will be NULLs. */
2275
2276 return hr;
2277}

◆ ITypeLib2_GetDocumentation2_Stub()

HRESULT __RPC_STUB ITypeLib2_GetDocumentation2_Stub ( ITypeLib2 This,
INT  index,
LCID  lcid,
DWORD  flags,
BSTR help_string,
DWORD help_context,
BSTR help_dll 
)

Definition at line 2279 of file usrmarshal.c.

2282{
2283 TRACE("%p, %d, %#lx, %#lx, %p, %p, %p.\n", This, index, lcid, flags, help_string, help_context, help_dll);
2284
2285 *help_string = *help_dll = NULL;
2286 *help_context = 0;
2287
2288 if(!(flags & 1)) help_string = NULL;
2289 if(!(flags & 2)) help_context = NULL;
2290 if(!(flags & 4)) help_dll = NULL;
2291
2292 return ITypeLib2_GetDocumentation2(This, index, lcid, help_string, help_context, help_dll);
2293}

◆ ITypeLib2_GetLibStatistics_Proxy()

HRESULT CALLBACK ITypeLib2_GetLibStatistics_Proxy ( ITypeLib2 This,
ULONG pcUniqueNames,
ULONG pcchUniqueNames 
)

Definition at line 2235 of file usrmarshal.c.

2239{
2240 FIXME("not implemented\n");
2241 return E_FAIL;
2242}

◆ ITypeLib2_GetLibStatistics_Stub()

HRESULT __RPC_STUB ITypeLib2_GetLibStatistics_Stub ( ITypeLib2 This,
ULONG pcUniqueNames,
ULONG pcchUniqueNames 
)

Definition at line 2244 of file usrmarshal.c.

2248{
2249 FIXME("not implemented\n");
2250 return E_FAIL;
2251}

◆ ITypeLib_FindName_Proxy()

HRESULT CALLBACK ITypeLib_FindName_Proxy ( ITypeLib This,
LPOLESTR  szNameBuf,
ULONG  lHashVal,
ITypeInfo **  ppTInfo,
MEMBERID *  rgMemId,
USHORT pcFound 
)

Definition at line 2192 of file usrmarshal.c.

2199{
2200 FIXME("not implemented\n");
2201 return E_FAIL;
2202}

◆ ITypeLib_FindName_Stub()

HRESULT __RPC_STUB ITypeLib_FindName_Stub ( ITypeLib This,
LPOLESTR  szNameBuf,
ULONG  lHashVal,
ITypeInfo **  ppTInfo,
MEMBERID *  rgMemId,
USHORT pcFound,
BSTR pBstrLibName 
)

Definition at line 2204 of file usrmarshal.c.

2212{
2213 FIXME("not implemented\n");
2214 return E_FAIL;
2215}

◆ ITypeLib_GetDocumentation_Proxy()

HRESULT CALLBACK ITypeLib_GetDocumentation_Proxy ( ITypeLib This,
INT  index,
BSTR name,
BSTR doc_string,
DWORD help_context,
BSTR help_file 
)

Definition at line 2126 of file usrmarshal.c.

2129{
2130 DWORD dummy_help_context, flags = 0;
2131 BSTR dummy_name, dummy_doc_string, dummy_help_file;
2132 HRESULT hr;
2133 TRACE("(%p, %d, %p, %p, %p, %p)\n", This, index, name, doc_string, help_context, help_file);
2134
2135 if(!name) name = &dummy_name;
2136 else flags = 1;
2137
2138 if(!doc_string) doc_string = &dummy_doc_string;
2139 else flags |= 2;
2140
2141 if(!help_context) help_context = &dummy_help_context;
2142 else flags |= 4;
2143
2144 if(!help_file) help_file = &dummy_help_file;
2145 else flags |= 8;
2146
2147 hr = ITypeLib_RemoteGetDocumentation_Proxy(This, index, flags, name, doc_string, help_context, help_file);
2148
2149 /* We don't need to free the dummy BSTRs since the stub ensures that these will be NULLs. */
2150
2151 return hr;
2152}

◆ ITypeLib_GetDocumentation_Stub()

HRESULT __RPC_STUB ITypeLib_GetDocumentation_Stub ( ITypeLib This,
INT  index,
DWORD  flags,
BSTR name,
BSTR doc_string,
DWORD help_context,
BSTR help_file 
)

Definition at line 2154 of file usrmarshal.c.

2157{
2158 TRACE("%p, %d, %#lx, %p, %p, %p, %p.\n", This, index, flags, name, doc_string, help_context, help_file);
2159
2160 *name = *doc_string = *help_file = NULL;
2161 *help_context = 0;
2162
2163 if(!(flags & 1)) name = NULL;
2164 if(!(flags & 2)) doc_string = NULL;
2165 if(!(flags & 4)) help_context = NULL;
2166 if(!(flags & 8)) help_file = NULL;
2167
2168 return ITypeLib_GetDocumentation(This, index, name, doc_string, help_context, help_file);
2169}

◆ ITypeLib_GetLibAttr_Proxy()

HRESULT CALLBACK ITypeLib_GetLibAttr_Proxy ( ITypeLib This,
TLIBATTR **  ppTLibAttr 
)

Definition at line 2093 of file usrmarshal.c.

2096{
2097 CLEANLOCALSTORAGE stg;
2098 TRACE("(%p, %p)\n", This, ppTLibAttr);
2099
2100 stg.flags = 0;
2101 stg.pStorage = NULL;
2102 stg.pInterface = NULL;
2103
2104 return ITypeLib_RemoteGetLibAttr_Proxy(This, ppTLibAttr, &stg);
2105}

◆ ITypeLib_GetLibAttr_Stub()

HRESULT __RPC_STUB ITypeLib_GetLibAttr_Stub ( ITypeLib This,
LPTLIBATTR *  ppTLibAttr,
CLEANLOCALSTORAGE *  pDummy 
)

Definition at line 2107 of file usrmarshal.c.

2111{
2112 HRESULT hr;
2113 TRACE("(%p, %p)\n", This, ppTLibAttr);
2114
2115 hr = ITypeLib_GetLibAttr(This, ppTLibAttr);
2116 if(hr != S_OK)
2117 return hr;
2118
2119 pDummy->flags = CLS_LIBATTR;
2120 ITypeLib_AddRef(This);
2121 pDummy->pInterface = (IUnknown*)This;
2122 pDummy->pStorage = ppTLibAttr;
2123 return hr;
2124}

◆ ITypeLib_GetTypeInfoCount_Proxy()

UINT CALLBACK ITypeLib_GetTypeInfoCount_Proxy ( ITypeLib This)

Definition at line 2073 of file usrmarshal.c.

2075{
2076 UINT count = 0;
2077 TRACE("(%p)\n", This);
2078
2079 ITypeLib_RemoteGetTypeInfoCount_Proxy(This, &count);
2080
2081 return count;
2082}
GLuint GLuint GLsizei count
Definition: gl.h:1545

◆ ITypeLib_GetTypeInfoCount_Stub()

HRESULT __RPC_STUB ITypeLib_GetTypeInfoCount_Stub ( ITypeLib This,
UINT pcTInfo 
)

Definition at line 2084 of file usrmarshal.c.

2087{
2088 TRACE("(%p, %p)\n", This, pcTInfo);
2089 *pcTInfo = ITypeLib_GetTypeInfoCount(This);
2090 return S_OK;
2091}

◆ ITypeLib_IsName_Proxy()

HRESULT CALLBACK ITypeLib_IsName_Proxy ( ITypeLib This,
LPOLESTR  szNameBuf,
ULONG  lHashVal,
BOOL pfName 
)

Definition at line 2171 of file usrmarshal.c.

2176{
2177 FIXME("not implemented\n");
2178 return E_FAIL;
2179}

◆ ITypeLib_IsName_Stub()

HRESULT __RPC_STUB ITypeLib_IsName_Stub ( ITypeLib This,
LPOLESTR  szNameBuf,
ULONG  lHashVal,
BOOL pfName,
BSTR pBstrLibName 
)

Definition at line 2181 of file usrmarshal.c.

2187{
2188 FIXME("not implemented\n");
2189 return E_FAIL;
2190}

◆ ITypeLib_ReleaseTLibAttr_Proxy()

void CALLBACK ITypeLib_ReleaseTLibAttr_Proxy ( ITypeLib This,
TLIBATTR *  pTLibAttr 
)

Definition at line 2217 of file usrmarshal.c.

2220{
2221 TRACE("(%p, %p)\n", This, pTLibAttr);
2222 CoTaskMemFree(pTLibAttr);
2223}

◆ ITypeLib_ReleaseTLibAttr_Stub()

HRESULT __RPC_STUB ITypeLib_ReleaseTLibAttr_Stub ( ITypeLib This)

Definition at line 2225 of file usrmarshal.c.

2227{
2228 TRACE("nothing to do\n");
2229 return S_OK;
2230}

◆ LPSAFEARRAY_UserFree()

void WINAPI LPSAFEARRAY_UserFree ( ULONG pFlags,
LPSAFEARRAY ppsa 
)

Definition at line 1207 of file usrmarshal.c.

1208{
1209 TRACE("("); dump_user_flags(pFlags); TRACE(", &%p\n", *ppsa);
1210
1211 SafeArrayDestroy(*ppsa);
1212 *ppsa = NULL;
1213}
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
Definition: safearray.c:1347
static void dump_user_flags(const ULONG *pFlags)
Definition: usrmarshal.c:50

Referenced by test_marshal_LPSAFEARRAY(), and VARIANT_UserFree().

◆ LPSAFEARRAY_UserMarshal()

unsigned char *WINAPI LPSAFEARRAY_UserMarshal ( ULONG pFlags,
unsigned char Buffer,
LPSAFEARRAY ppsa 
)

Definition at line 887 of file usrmarshal.c.

888{
889 HRESULT hr;
890
891 TRACE("("); dump_user_flags(pFlags); TRACE(", %p, &%p\n", Buffer, *ppsa);
892
894 *(ULONG *)Buffer = *ppsa ? 0x1 : 0x0;
895 Buffer += sizeof(ULONG);
896 if (*ppsa)
897 {
898 VARTYPE vt;
899 SAFEARRAY *psa = *ppsa;
900 ULONG ulCellCount = SAFEARRAY_GetCellCount(psa);
901 SAFEARRAYBOUND *bound;
902 SF_TYPE sftype;
903 GUID guid;
904 INT i;
905
906 sftype = SAFEARRAY_GetUnionType(psa);
907
908 *(ULONG *)Buffer = psa->cDims;
909 Buffer += sizeof(ULONG);
910 *(USHORT *)Buffer = psa->cDims;
911 Buffer += sizeof(USHORT);
912 *(USHORT *)Buffer = psa->fFeatures;
913 Buffer += sizeof(USHORT);
914 *(ULONG *)Buffer = elem_wire_size(psa, sftype);
915 Buffer += sizeof(ULONG);
916
918 if ((psa->fFeatures & FADF_HAVEIID) || FAILED(hr)) vt = 0;
919
920 *(ULONG *)Buffer = (USHORT)psa->cLocks | (vt << 16);
921 Buffer += sizeof(ULONG);
922
923 *(ULONG *)Buffer = sftype;
924 Buffer += sizeof(ULONG);
925
926 *(ULONG *)Buffer = ulCellCount;
927 Buffer += sizeof(ULONG);
928 *(ULONG *)Buffer = psa->pvData ? 0x2 : 0x0;
929 Buffer += sizeof(ULONG);
930 if (sftype == SF_HAVEIID)
931 {
933 memcpy(Buffer, &guid, sizeof(guid));
934 Buffer += sizeof(guid);
935 }
936
937 /* bounds are marshaled in opposite order comparing to storage layout */
938 bound = (SAFEARRAYBOUND*)Buffer;
939 for (i = 0; i < psa->cDims; i++)
940 {
941 memcpy(bound++, &psa->rgsabound[psa->cDims-i-1], sizeof(psa->rgsabound[0]));
942 }
943 Buffer += sizeof(psa->rgsabound[0]) * psa->cDims;
944
945 *(ULONG *)Buffer = ulCellCount;
946 Buffer += sizeof(ULONG);
947
948 if (psa->pvData)
949 {
950 switch (sftype)
951 {
952 case SF_BSTR:
953 {
954 BSTR* lpBstr;
955
956 for (lpBstr = psa->pvData; ulCellCount; ulCellCount--, lpBstr++)
957 Buffer = BSTR_UserMarshal(pFlags, Buffer, lpBstr);
958
959 break;
960 }
961 case SF_DISPATCH:
962 case SF_UNKNOWN:
963 case SF_HAVEIID:
964 {
965 IUnknown **lpUnk;
966 const GUID *iid;
967
968 if (sftype == SF_HAVEIID)
969 iid = &guid;
970 else if (sftype == SF_UNKNOWN)
971 iid = &IID_IUnknown;
972 else
973 iid = &IID_IDispatch;
974
975 for (lpUnk = psa->pvData; ulCellCount; ulCellCount--, lpUnk++)
976 Buffer = interface_user_marshal(pFlags, Buffer, iid, *lpUnk);
977
978 break;
979 }
980 case SF_VARIANT:
981 {
982 VARIANT* lpVariant;
983
984 for (lpVariant = psa->pvData; ulCellCount; ulCellCount--, lpVariant++)
985 Buffer = VARIANT_UserMarshal(pFlags, Buffer, lpVariant);
986
987 break;
988 }
989 case SF_RECORD:
990 {
991 IRecordInfo* pRecInfo = NULL;
992
993 hr = SafeArrayGetRecordInfo(psa, &pRecInfo);
994 if (FAILED(hr))
996
997 if (pRecInfo)
998 {
999 FIXME("write record info %p\n", pRecInfo);
1000
1001 IRecordInfo_Release(pRecInfo);
1002 }
1003 break;
1004 }
1005
1006 case SF_I8:
1008 /* fallthrough */
1009 case SF_I1:
1010 case SF_I2:
1011 case SF_I4:
1012 /* Just copy the data over */
1013 memcpy(Buffer, psa->pvData, ulCellCount * psa->cbElements);
1014 Buffer += ulCellCount * psa->cbElements;
1015 break;
1016 default:
1017 break;
1018 }
1019 }
1020
1021 }
1022 return Buffer;
1023}
const GUID IID_IUnknown
unsigned short VARTYPE
Definition: compat.h:2254
GUID guid
Definition: version.c:147
HRESULT WINAPI SafeArrayGetIID(SAFEARRAY *psa, GUID *pGuid)
Definition: safearray.c:1670
HRESULT WINAPI SafeArrayGetRecordInfo(SAFEARRAY *psa, IRecordInfo **pRinfo)
Definition: safearray.c:1609
HRESULT WINAPI SafeArrayGetVartype(SAFEARRAY *psa, VARTYPE *pvt)
Definition: safearray.c:1534
static ULONG SAFEARRAY_GetCellCount(const SAFEARRAY *psa)
Definition: usrmarshal.c:675
static SF_TYPE SAFEARRAY_GetUnionType(SAFEARRAY *psa)
Definition: usrmarshal.c:692
static unsigned char * interface_user_marshal(ULONG *pFlags, unsigned char *Buffer, REFIID riid, IUnknown *punk)
Definition: usrmarshal.c:325
unsigned char *WINAPI VARIANT_UserMarshal(ULONG *pFlags, unsigned char *Buffer, VARIANT *pvar)
Definition: usrmarshal.c:386
static DWORD elem_wire_size(LPSAFEARRAY lpsa, SF_TYPE sftype)
Definition: usrmarshal.c:747
unsigned char *WINAPI BSTR_UserMarshal(ULONG *pFlags, unsigned char *Buffer, BSTR *pstr)
Definition: usrmarshal.c:144
static SCRIPT_CACHE SCRIPT_ANALYSIS * psa
Definition: usp10.c:64
unsigned short USHORT
Definition: pedump.c:61
void DECLSPEC_NORETURN WINAPI RpcRaiseException(RPC_STATUS exception)
Definition: rpcrt4_main.c:213
int32_t INT
Definition: typedefs.h:58

Referenced by test_marshal_LPSAFEARRAY(), and VARIANT_UserMarshal().

◆ LPSAFEARRAY_UserSize()

ULONG WINAPI LPSAFEARRAY_UserSize ( ULONG pFlags,
ULONG  StartingSize,
LPSAFEARRAY ppsa 
)

Definition at line 785 of file usrmarshal.c.

786{
787 ULONG size = StartingSize;
788
789 TRACE("("); dump_user_flags(pFlags); TRACE(", %ld, %p\n", StartingSize, *ppsa);
790
791 ALIGN_LENGTH(size, 3);
792 size += sizeof(ULONG);
793 if (*ppsa)
794 {
795 SAFEARRAY *psa = *ppsa;
796 ULONG ulCellCount = SAFEARRAY_GetCellCount(psa);
797 SF_TYPE sftype;
798 HRESULT hr;
799
800 size += sizeof(ULONG);
801 size += 2 * sizeof(USHORT) + 2 * sizeof(ULONG);
802
803 sftype = SAFEARRAY_GetUnionType(psa);
804 size += sizeof(ULONG);
805
806 size += sizeof(ULONG);
807 size += sizeof(ULONG);
808 if (sftype == SF_HAVEIID)
809 size += sizeof(IID);
810
811 size += sizeof(psa->rgsabound[0]) * psa->cDims;
812
813 size += sizeof(ULONG);
814
815 switch (sftype)
816 {
817 case SF_BSTR:
818 {
819 BSTR* lpBstr;
820
821 for (lpBstr = psa->pvData; ulCellCount; ulCellCount--, lpBstr++)
822 size = BSTR_UserSize(pFlags, size, lpBstr);
823
824 break;
825 }
826 case SF_DISPATCH:
827 case SF_UNKNOWN:
828 case SF_HAVEIID:
829 {
830 IUnknown **lpUnk;
831 GUID guid;
832
833 if (sftype == SF_HAVEIID)
835 else if (sftype == SF_UNKNOWN)
837 else
839
840 for (lpUnk = psa->pvData; ulCellCount; ulCellCount--, lpUnk++)
841 size = interface_user_size(pFlags, size, &guid, *lpUnk);
842
843 break;
844 }
845 case SF_VARIANT:
846 {
847 VARIANT* lpVariant;
848
849 for (lpVariant = psa->pvData; ulCellCount; ulCellCount--, lpVariant++)
850 size = VARIANT_UserSize(pFlags, size, lpVariant);
851
852 break;
853 }
854 case SF_RECORD:
855 {
856 IRecordInfo* pRecInfo = NULL;
857
858 hr = SafeArrayGetRecordInfo(psa, &pRecInfo);
859 if (FAILED(hr))
861
862 if (pRecInfo)
863 {
864 FIXME("size record info %p\n", pRecInfo);
865
866 IRecordInfo_Release(pRecInfo);
867 }
868 break;
869 }
870 case SF_I8:
871 ALIGN_LENGTH(size, 7);
872 /* fallthrough */
873 case SF_I1:
874 case SF_I2:
875 case SF_I4:
876 size += ulCellCount * psa->cbElements;
877 break;
878 default:
879 break;
880 }
881
882 }
883
884 return size;
885}
static unsigned interface_user_size(ULONG *pFlags, ULONG Start, REFIID riid, IUnknown *punk)
Definition: usrmarshal.c:269
ULONG WINAPI BSTR_UserSize(ULONG *pFlags, ULONG Start, BSTR *pstr)
Definition: usrmarshal.c:134
ULONG WINAPI VARIANT_UserSize(ULONG *pFlags, ULONG Start, VARIANT *pvar)
Definition: usrmarshal.c:363
struct _IID IID

Referenced by test_marshal_LPSAFEARRAY(), and wire_extra_user_size().

◆ LPSAFEARRAY_UserUnmarshal()

unsigned char *WINAPI LPSAFEARRAY_UserUnmarshal ( ULONG pFlags,
unsigned char Buffer,
LPSAFEARRAY ppsa 
)

Definition at line 1029 of file usrmarshal.c.

1030{
1031 ULONG ptr;
1032 wireSAFEARRAY wiresa;
1033 ULONG cDims;
1034 HRESULT hr;
1035 SF_TYPE sftype;
1036 ULONG cell_count;
1037 GUID guid;
1038 VARTYPE vt;
1039 SAFEARRAYBOUND *wiresab;
1040
1041 TRACE("("); dump_user_flags(pFlags); TRACE(", %p, %p\n", Buffer, ppsa);
1042
1044 ptr = *(ULONG *)Buffer;
1045 Buffer += sizeof(ULONG);
1046
1047 if (!ptr)
1048 {
1049 SafeArrayDestroy(*ppsa);
1050 *ppsa = NULL;
1051
1052 TRACE("NULL safe array unmarshaled\n");
1053
1054 return Buffer;
1055 }
1056
1057 cDims = *(ULONG *)Buffer;
1058 Buffer += sizeof(ULONG);
1059
1060 wiresa = (wireSAFEARRAY)Buffer;
1061 Buffer += 2 * sizeof(USHORT) + 2 * sizeof(ULONG);
1062
1063 if (cDims != wiresa->cDims)
1065
1066 /* FIXME: there should be a limit on how large cDims can be */
1067
1068 vt = HIWORD(wiresa->cLocks);
1069
1070 sftype = *(ULONG *)Buffer;
1071 Buffer += sizeof(ULONG);
1072
1073 cell_count = *(ULONG *)Buffer;
1074 Buffer += sizeof(ULONG);
1075 ptr = *(ULONG *)Buffer;
1076 Buffer += sizeof(ULONG);
1077 if (sftype == SF_HAVEIID)
1078 {
1079 memcpy(&guid, Buffer, sizeof(guid));
1080 Buffer += sizeof(guid);
1081 }
1082
1083 wiresab = (SAFEARRAYBOUND *)Buffer;
1084 Buffer += sizeof(wiresab[0]) * wiresa->cDims;
1085
1086 if(*ppsa && (*ppsa)->cDims==wiresa->cDims)
1087 {
1088 if(((*ppsa)->fFeatures & ~FADF_AUTOSETFLAGS) != (wiresa->fFeatures & ~FADF_AUTOSETFLAGS))
1090
1091 if(SAFEARRAY_GetCellCount(*ppsa)*(*ppsa)->cbElements != cell_count*elem_mem_size(wiresa, sftype))
1092 {
1093 if((*ppsa)->fFeatures & (FADF_AUTO|FADF_STATIC|FADF_EMBEDDED|FADF_FIXEDSIZE))
1095
1096 hr = SafeArrayDestroyData(*ppsa);
1097 if(FAILED(hr))
1099 }
1100 memcpy((*ppsa)->rgsabound, wiresab, sizeof(*wiresab)*wiresa->cDims);
1101
1102 if((*ppsa)->fFeatures & FADF_HAVEVARTYPE)
1103 ((DWORD*)(*ppsa))[-1] = vt;
1104 }
1105 else if(vt)
1106 {
1107 SafeArrayDestroy(*ppsa);
1108 *ppsa = SafeArrayCreateEx(vt, wiresa->cDims, wiresab, NULL);
1109 if (!*ppsa) RpcRaiseException(E_OUTOFMEMORY);
1110 }
1111 else
1112 {
1113 SafeArrayDestroy(*ppsa);
1114 if (FAILED(SafeArrayAllocDescriptor(wiresa->cDims, ppsa)))
1116 memcpy((*ppsa)->rgsabound, wiresab, sizeof(SAFEARRAYBOUND) * wiresa->cDims);
1117 }
1118
1119 /* be careful about which flags we set since they could be a security
1120 * risk */
1121 (*ppsa)->fFeatures &= FADF_AUTOSETFLAGS;
1122 (*ppsa)->fFeatures |= (wiresa->fFeatures & ~(FADF_AUTOSETFLAGS));
1123 /* FIXME: there should be a limit on how large wiresa->cbElements can be */
1124 (*ppsa)->cbElements = elem_mem_size(wiresa, sftype);
1125
1126 /* SafeArrayCreateEx allocates the data for us, but
1127 * SafeArrayAllocDescriptor doesn't */
1128 if(!(*ppsa)->pvData)
1129 {
1130 hr = SafeArrayAllocData(*ppsa);
1131 if (FAILED(hr))
1133 }
1134
1135 if ((*(ULONG *)Buffer != cell_count) || (SAFEARRAY_GetCellCount(*ppsa) != cell_count))
1137 Buffer += sizeof(ULONG);
1138
1139 if (ptr)
1140 {
1141 switch (sftype)
1142 {
1143 case SF_BSTR:
1144 {
1145 BSTR* lpBstr;
1146
1147 for (lpBstr = (*ppsa)->pvData; cell_count; cell_count--, lpBstr++)
1148 Buffer = BSTR_UserUnmarshal(pFlags, Buffer, lpBstr);
1149
1150 break;
1151 }
1152 case SF_DISPATCH:
1153 case SF_UNKNOWN:
1154 case SF_HAVEIID:
1155 {
1156 IUnknown **lpUnk;
1157 const GUID *iid;
1158
1159 if (sftype == SF_HAVEIID)
1160 iid = &guid;
1161 else if (sftype == SF_UNKNOWN)
1162 iid = &IID_IUnknown;
1163 else
1164 iid = &IID_IDispatch;
1165
1166 for (lpUnk = (*ppsa)->pvData; cell_count; cell_count--, lpUnk++)
1167 Buffer = interface_user_unmarshal(pFlags, Buffer, iid, lpUnk);
1168
1169 break;
1170 }
1171 case SF_VARIANT:
1172 {
1173 VARIANT* lpVariant;
1174
1175 for (lpVariant = (*ppsa)->pvData; cell_count; cell_count--, lpVariant++)
1176 Buffer = VARIANT_UserUnmarshal(pFlags, Buffer, lpVariant);
1177
1178 break;
1179 }
1180 case SF_RECORD:
1181 {
1182 FIXME("set record info\n");
1183
1184 break;
1185 }
1186
1187 case SF_I8:
1189 /* fallthrough */
1190 case SF_I1:
1191 case SF_I2:
1192 case SF_I4:
1193 /* Just copy the data over */
1194 memcpy((*ppsa)->pvData, Buffer, cell_count * (*ppsa)->cbElements);
1195 Buffer += cell_count * (*ppsa)->cbElements;
1196 break;
1197 default:
1198 break;
1199 }
1200 }
1201
1202 TRACE("safe array unmarshaled: %p\n", *ppsa);
1203
1204 return Buffer;
1205}
HRESULT WINAPI SafeArrayDestroyData(SAFEARRAY *psa)
Definition: safearray.c:1256
HRESULT WINAPI SafeArrayAllocDescriptor(UINT cDims, SAFEARRAY **ppsaOut)
Definition: safearray.c:476
SAFEARRAY *WINAPI SafeArrayCreateEx(VARTYPE vt, UINT cDims, SAFEARRAYBOUND *rgsabound, LPVOID pvExtra)
Definition: safearray.c:628
HRESULT WINAPI SafeArrayAllocData(SAFEARRAY *psa)
Definition: safearray.c:557
unsigned char *WINAPI VARIANT_UserUnmarshal(ULONG *pFlags, unsigned char *Buffer, VARIANT *pvar)
Definition: usrmarshal.c:490
#define FADF_AUTOSETFLAGS
Definition: usrmarshal.c:1025
static unsigned char * interface_user_unmarshal(ULONG *pFlags, unsigned char *Buffer, REFIID riid, IUnknown **ppunk)
Definition: usrmarshal.c:346
static DWORD elem_mem_size(wireSAFEARRAY wiresa, SF_TYPE sftype)
Definition: usrmarshal.c:765
unsigned char *WINAPI BSTR_UserUnmarshal(ULONG *pFlags, unsigned char *Buffer, BSTR *pstr)
Definition: usrmarshal.c:166
#define DISP_E_BADCALLEE
Definition: winerror.h:3628
#define RPC_S_INVALID_BOUND
Definition: winerror.h:1400

Referenced by test_marshal_LPSAFEARRAY(), and VARIANT_UserUnmarshal().

◆ SAFEARRAY_GetCellCount()

static ULONG SAFEARRAY_GetCellCount ( const SAFEARRAY psa)
static

Definition at line 675 of file usrmarshal.c.

676{
677 const SAFEARRAYBOUND* psab = psa->rgsabound;
678 USHORT cCount = psa->cDims;
679 ULONG ulNumCells = 1;
680
681 while (cCount--)
682 {
683 /* This is a valid bordercase. See testcases. -Marcus */
684 if (!psab->cElements)
685 return 0;
686 ulNumCells *= psab->cElements;
687 psab++;
688 }
689 return ulNumCells;
690}

Referenced by LPSAFEARRAY_UserMarshal(), LPSAFEARRAY_UserSize(), and LPSAFEARRAY_UserUnmarshal().

◆ SAFEARRAY_GetUnionType()

static SF_TYPE SAFEARRAY_GetUnionType ( SAFEARRAY psa)
inlinestatic

Definition at line 692 of file usrmarshal.c.

693{
694 VARTYPE vt;
695 HRESULT hr;
696
698 if (FAILED(hr))
699 {
700 if(psa->fFeatures & FADF_VARIANT) return SF_VARIANT;
701
702 switch(psa->cbElements)
703 {
704 case 1: vt = VT_I1; break;
705 case 2: vt = VT_I2; break;
706 case 4: vt = VT_I4; break;
707 case 8: vt = VT_I8; break;
708 default:
710 }
711 }
712
713 if (psa->fFeatures & FADF_HAVEIID)
714 return SF_HAVEIID;
715
716 switch (vt)
717 {
718 case VT_I1:
719 case VT_UI1: return SF_I1;
720 case VT_BOOL:
721 case VT_I2:
722 case VT_UI2: return SF_I2;
723 case VT_INT:
724 case VT_UINT:
725 case VT_I4:
726 case VT_UI4:
727 case VT_R4: return SF_I4;
728 case VT_DATE:
729 case VT_CY:
730 case VT_R8:
731 case VT_I8:
732 case VT_UI8: return SF_I8;
733 case VT_INT_PTR:
734 case VT_UINT_PTR: return (sizeof(UINT_PTR) == 4 ? SF_I4 : SF_I8);
735 case VT_BSTR: return SF_BSTR;
736 case VT_DISPATCH: return SF_DISPATCH;
737 case VT_VARIANT: return SF_VARIANT;
738 case VT_UNKNOWN: return SF_UNKNOWN;
739 /* Note: Return a non-zero size to indicate vt is valid. The actual size
740 * of a UDT is taken from the result of IRecordInfo_GetSize().
741 */
742 case VT_RECORD: return SF_RECORD;
743 default: return SF_ERROR;
744 }
745}
@ VT_UINT_PTR
Definition: compat.h:2328
@ VT_INT_PTR
Definition: compat.h:2327
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274

Referenced by LPSAFEARRAY_UserMarshal(), and LPSAFEARRAY_UserSize().

◆ VARIANT_UserFree()

void WINAPI VARIANT_UserFree ( ULONG pFlags,
VARIANT pvar 
)

Definition at line 628 of file usrmarshal.c.

629{
630 VARTYPE vt = V_VT(pvar);
631 PVOID ref = NULL;
632
633 TRACE("%#lx, %p.\n", *pFlags, pvar);
634 TRACE("vt=%04x\n", V_VT(pvar));
635
636 if (vt & VT_BYREF) ref = V_BYREF(pvar);
637
638 VariantClear(pvar);
639 if (!ref) return;
640
641 if(vt & VT_ARRAY)
642 {
643 if (vt & VT_BYREF)
644 LPSAFEARRAY_UserFree(pFlags, V_ARRAYREF(pvar));
645 else
646 LPSAFEARRAY_UserFree(pFlags, &V_ARRAY(pvar));
647 }
648 else
649 {
650 switch (vt)
651 {
652 case VT_BSTR | VT_BYREF:
653 BSTR_UserFree(pFlags, V_BSTRREF(pvar));
654 break;
655 case VT_VARIANT | VT_BYREF:
656 VARIANT_UserFree(pFlags, V_VARIANTREF(pvar));
657 break;
658 case VT_RECORD | VT_BYREF:
659 FIXME("handle BRECORD by ref\n");
660 break;
661 case VT_UNKNOWN | VT_BYREF:
662 case VT_DISPATCH | VT_BYREF:
663 if (*V_UNKNOWNREF(pvar))
664 IUnknown_Release(*V_UNKNOWNREF(pvar));
665 break;
666 }
667 }
668
670}
void WINAPI VARIANT_UserFree(ULONG *pFlags, VARIANT *pvar)
Definition: usrmarshal.c:628
void WINAPI BSTR_UserFree(ULONG *pFlags, BSTR *pstr)
Definition: usrmarshal.c:187
void WINAPI LPSAFEARRAY_UserFree(ULONG *pFlags, LPSAFEARRAY *ppsa)
Definition: usrmarshal.c:1207
#define V_ARRAY(A)
Definition: oleauto.h:222
#define V_ARRAYREF(A)
Definition: oleauto.h:223
#define V_BSTRREF(A)
Definition: oleauto.h:227
#define V_UNKNOWNREF(A)
Definition: oleauto.h:282
#define V_VARIANTREF(A)
Definition: oleauto.h:283
#define V_BYREF(A)
Definition: oleauto.h:228
Definition: send.c:48

Referenced by test_marshal_VARIANT(), and VARIANT_UserFree().

◆ VARIANT_UserMarshal()

unsigned char *WINAPI VARIANT_UserMarshal ( ULONG pFlags,
unsigned char Buffer,
VARIANT pvar 
)

Definition at line 386 of file usrmarshal.c.

387{
389 ULONG type_size;
390 int align;
391 unsigned char *Pos;
392
393 TRACE("%#lx, %p, %p.\n", *pFlags, Buffer, pvar);
394 TRACE("vt=%04x\n", V_VT(pvar));
395
397
399
400 header->clSize = 0; /* fixed up at the end */
401 header->rpcReserved = 0;
402 header->vt = V_VT(pvar);
403#ifdef __REACTOS__
404 header->wReserved1 = pvar->n1.n2.wReserved1;
405 header->wReserved2 = pvar->n1.n2.wReserved2;
406 header->wReserved3 = pvar->n1.n2.wReserved3;
407#else
408 header->wReserved1 = pvar->wReserved1;
409 header->wReserved2 = pvar->wReserved2;
410 header->wReserved3 = pvar->wReserved3;
411#endif
412 header->switch_is = V_VT(pvar);
413 if(header->switch_is & VT_ARRAY)
414 header->switch_is &= ~VT_TYPEMASK;
415
416 Pos = (unsigned char*)(header + 1);
417 type_size = get_type_size(pFlags, V_VT(pvar));
418 align = get_type_alignment(pFlags, V_VT(pvar));
420
421 if(header->vt & VT_BYREF)
422 {
423 *(DWORD *)Pos = max(type_size, 4);
424 Pos += 4;
425 if((header->vt & VT_TYPEMASK) != VT_VARIANT)
426 {
427 memcpy(Pos, V_BYREF(pvar), type_size);
428 Pos += type_size;
429 }
430 else
431 {
432 *(DWORD*)Pos = 'U' | 's' << 8 | 'e' << 16 | 'r' << 24;
433 Pos += 4;
434 }
435 }
436 else
437 {
438 if((header->vt & VT_TYPEMASK) == VT_DECIMAL)
439 memcpy(Pos, pvar, type_size);
440 else
441 memcpy(Pos, &V_UI8(pvar), type_size);
442 Pos += type_size;
443 }
444
445 if(header->vt & VT_ARRAY)
446 {
447 if(header->vt & VT_BYREF)
448 Pos = LPSAFEARRAY_UserMarshal(pFlags, Pos, V_ARRAYREF(pvar));
449 else
450 Pos = LPSAFEARRAY_UserMarshal(pFlags, Pos, &V_ARRAY(pvar));
451 }
452 else
453 {
454 switch (header->vt)
455 {
456 case VT_BSTR:
457 Pos = BSTR_UserMarshal(pFlags, Pos, &V_BSTR(pvar));
458 break;
459 case VT_BSTR | VT_BYREF:
460 Pos = BSTR_UserMarshal(pFlags, Pos, V_BSTRREF(pvar));
461 break;
462 case VT_VARIANT | VT_BYREF:
463 Pos = VARIANT_UserMarshal(pFlags, Pos, V_VARIANTREF(pvar));
464 break;
465 case VT_UNKNOWN:
467 break;
468 case VT_UNKNOWN | VT_BYREF:
470 break;
471 case VT_DISPATCH:
473 break;
474 case VT_DISPATCH | VT_BYREF:
476 break;
477 case VT_RECORD:
478 FIXME("handle BRECORD by val\n");
479 break;
480 case VT_RECORD | VT_BYREF:
481 FIXME("handle BRECORD by ref\n");
482 break;
483 }
484 }
485 header->clSize = ((Pos - Buffer) + 7) >> 3;
486 TRACE("marshalled size %ld\n", header->clSize);
487 return Pos;
488}
ush Pos
Definition: deflate.h:92
@ VT_TYPEMASK
Definition: compat.h:2346
unsigned char *WINAPI LPSAFEARRAY_UserMarshal(ULONG *pFlags, unsigned char *Buffer, LPSAFEARRAY *ppsa)
Definition: usrmarshal.c:887
static unsigned int get_type_alignment(ULONG *pFlags, VARTYPE vt)
Definition: usrmarshal.c:259
int align(int length, int align)
Definition: dsound8.c:36
#define V_DISPATCHREF(A)
Definition: oleauto.h:240
#define V_UI8(A)
Definition: oleauto.h:272
WORD wReserved1
Definition: compat.h:2382
WORD wReserved2
Definition: compat.h:2383
WORD wReserved3
Definition: compat.h:2384
#define max(a, b)
Definition: svc.c:63

Referenced by LPSAFEARRAY_UserMarshal(), test_marshal_VARIANT(), and VARIANT_UserMarshal().

◆ VARIANT_UserSize()

ULONG WINAPI VARIANT_UserSize ( ULONG pFlags,
ULONG  Start,
VARIANT pvar 
)

Definition at line 363 of file usrmarshal.c.

364{
365 int align;
366 TRACE("%#lx, %lu, %p.\n", *pFlags, Start, pvar);
367 TRACE("vt=%04x\n", V_VT(pvar));
368
370 Start += sizeof(variant_wire_t);
371 if(V_VT(pvar) & VT_BYREF)
372 Start += 4;
373
374 align = get_type_alignment(pFlags, V_VT(pvar));
376 if(V_VT(pvar) == (VT_VARIANT | VT_BYREF))
377 Start += 4;
378 else
379 Start += get_type_size(pFlags, V_VT(pvar));
380 Start = wire_extra_user_size(pFlags, Start, pvar);
381
382 TRACE("returning %ld\n", Start);
383 return Start;
384}
static ULONG wire_extra_user_size(ULONG *pFlags, ULONG Start, VARIANT *pvar)
Definition: usrmarshal.c:287

Referenced by LPSAFEARRAY_UserSize(), test_marshal_LPSAFEARRAY(), test_marshal_VARIANT(), and wire_extra_user_size().

◆ VARIANT_UserUnmarshal()

unsigned char *WINAPI VARIANT_UserUnmarshal ( ULONG pFlags,
unsigned char Buffer,
VARIANT pvar 
)

Definition at line 490 of file usrmarshal.c.

491{
493 ULONG type_size;
494 int align;
495 unsigned char *Pos;
496
497 TRACE("%#lx, %p, %p.\n", *pFlags, Buffer, pvar);
498
500
502
503 Pos = (unsigned char*)(header + 1);
504 type_size = get_type_size(pFlags, header->vt);
505 align = get_type_alignment(pFlags, header->vt);
507
508 if(header->vt & VT_BYREF)
509 {
510 ULONG mem_size;
511 Pos += 4;
512
513 /* byref array needs to allocate a SAFEARRAY pointer */
514 if (header->vt & VT_ARRAY)
515 mem_size = sizeof(void *);
516 else switch (header->vt & ~VT_BYREF)
517 {
518 /* these types have a different memory size compared to wire size */
519 case VT_UNKNOWN:
520 case VT_DISPATCH:
521 case VT_BSTR:
522 mem_size = sizeof(void *);
523 break;
524 default:
525 mem_size = type_size;
526 break;
527 }
528
529 if (V_VT(pvar) != header->vt)
530 {
531 VariantClear(pvar);
532 V_BYREF(pvar) = CoTaskMemAlloc(mem_size);
533 memset(V_BYREF(pvar), 0, mem_size);
534 }
535 else if (!V_BYREF(pvar))
536 {
537 V_BYREF(pvar) = CoTaskMemAlloc(mem_size);
538 memset(V_BYREF(pvar), 0, mem_size);
539 }
540
541 if(!(header->vt & VT_ARRAY)
542 && (header->vt & VT_TYPEMASK) != VT_BSTR
543 && (header->vt & VT_TYPEMASK) != VT_VARIANT
544 && (header->vt & VT_TYPEMASK) != VT_UNKNOWN
545 && (header->vt & VT_TYPEMASK) != VT_DISPATCH
546 && (header->vt & VT_TYPEMASK) != VT_RECORD)
547 memcpy(V_BYREF(pvar), Pos, type_size);
548
549 if((header->vt & VT_TYPEMASK) != VT_VARIANT)
550 Pos += type_size;
551 else
552 Pos += 4;
553 }
554 else
555 {
556 VariantClear(pvar);
557 if(header->vt & VT_ARRAY)
558 V_ARRAY(pvar) = NULL;
559 else if((header->vt & VT_TYPEMASK) == VT_BSTR)
560 V_BSTR(pvar) = NULL;
561 else if((header->vt & VT_TYPEMASK) == VT_UNKNOWN)
562 V_UNKNOWN(pvar) = NULL;
563 else if((header->vt & VT_TYPEMASK) == VT_DISPATCH)
564 V_DISPATCH(pvar) = NULL;
565 else if((header->vt & VT_TYPEMASK) == VT_RECORD)
566 V_RECORD(pvar) = NULL;
567 else if((header->vt & VT_TYPEMASK) == VT_DECIMAL)
568 memcpy(pvar, Pos, type_size);
569 else
570 memcpy(&V_UI8(pvar), Pos, type_size);
571 Pos += type_size;
572 }
573
574 V_VT(pvar) = header->vt;
575#ifdef __REACTOS__
576 pvar->n1.n2.wReserved1 = header->wReserved1;
577 pvar->n1.n2.wReserved2 = header->wReserved2;
578 pvar->n1.n2.wReserved3 = header->wReserved3;
579#else
580 pvar->wReserved1 = header->wReserved1;
581 pvar->wReserved2 = header->wReserved2;
582 pvar->wReserved3 = header->wReserved3;
583#endif
584
585 if(header->vt & VT_ARRAY)
586 {
587 if(header->vt & VT_BYREF)
589 else
590 Pos = LPSAFEARRAY_UserUnmarshal(pFlags, Pos, &V_ARRAY(pvar));
591 }
592 else
593 {
594 switch (header->vt)
595 {
596 case VT_BSTR:
597 Pos = BSTR_UserUnmarshal(pFlags, Pos, &V_BSTR(pvar));
598 break;
599 case VT_BSTR | VT_BYREF:
600 Pos = BSTR_UserUnmarshal(pFlags, Pos, V_BSTRREF(pvar));
601 break;
602 case VT_VARIANT | VT_BYREF:
603 Pos = VARIANT_UserUnmarshal(pFlags, Pos, V_VARIANTREF(pvar));
604 break;
605 case VT_UNKNOWN:
607 break;
608 case VT_UNKNOWN | VT_BYREF:
610 break;
611 case VT_DISPATCH:
613 break;
614 case VT_DISPATCH | VT_BYREF:
616 break;
617 case VT_RECORD:
618 FIXME("handle BRECORD by val\n");
619 break;
620 case VT_RECORD | VT_BYREF:
621 FIXME("handle BRECORD by ref\n");
622 break;
623 }
624 }
625 return Pos;
626}
unsigned char *WINAPI LPSAFEARRAY_UserUnmarshal(ULONG *pFlags, unsigned char *Buffer, LPSAFEARRAY *ppsa)
Definition: usrmarshal.c:1029
#define V_RECORD(A)
Definition: oleauto.h:213

Referenced by LPSAFEARRAY_UserUnmarshal(), test_marshal_VARIANT(), and VARIANT_UserUnmarshal().

◆ WdtpInterfacePointer_UserMarshal()

unsigned char *__RPC_USER WdtpInterfacePointer_UserMarshal ( ULONG pFlags,
ULONG  RealFlags,
unsigned char pBuffer,
IUnknown punk,
REFIID  riid 
)

Definition at line 917 of file usrmarshal.c.

918{
920 IStream *stm;
921 DWORD size;
922 void *ptr;
923
924 TRACE("%s, %#lx, %p, &%p, %s.\n", debugstr_user_flags(pFlags), RealFlags, pBuffer, punk, debugstr_guid(riid));
925
926 if (!h) return NULL;
927 if (CreateStreamOnHGlobal(h, TRUE, &stm) != S_OK)
928 {
929 GlobalFree(h);
930 return NULL;
931 }
932
933 if (CoMarshalInterface(stm, riid, punk, LOWORD(RealFlags), NULL, MSHLFLAGS_NORMAL) != S_OK)
934 {
935 IStream_Release(stm);
936 return pBuffer;
937 }
938
940 size = GlobalSize(h);
941
942 *(DWORD *)pBuffer = size;
943 pBuffer += sizeof(DWORD);
944 *(DWORD *)pBuffer = size;
945 pBuffer += sizeof(DWORD);
946
947 ptr = GlobalLock(h);
950
951 IStream_Release(stm);
952 return pBuffer + size;
953}
#define TRUE
Definition: types.h:120
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL delete_on_release, IStream **stream)
HRESULT WINAPI CoMarshalInterface(IStream *stream, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
Definition: marshal.c:483
static const char * debugstr_user_flags(ULONG *pFlags)
Definition: usrmarshal.c:34
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
SIZE_T NTAPI GlobalSize(HGLOBAL hMem)
Definition: heapmem.c:1090
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
PVOID pBuffer
#define GMEM_MOVEABLE
Definition: winbase.h:318

◆ WdtpInterfacePointer_UserSize()

ULONG __RPC_USER WdtpInterfacePointer_UserSize ( ULONG pFlags,
ULONG  RealFlags,
ULONG  StartingSize,
IUnknown punk,
REFIID  riid 
)

Definition at line 882 of file usrmarshal.c.

883{
884 DWORD marshal_size = 0;
885 HRESULT hr;
886
887 TRACE("%s, %#lx, %lu, %p, %s.\n", debugstr_user_flags(pFlags), RealFlags, StartingSize, punk, debugstr_guid(riid));
888
889 hr = CoGetMarshalSizeMax(&marshal_size, riid, punk, LOWORD(RealFlags), NULL, MSHLFLAGS_NORMAL);
890 if (FAILED(hr)) return StartingSize;
891
892 ALIGN_LENGTH(StartingSize, 3);
893 StartingSize += 2 * sizeof(DWORD);
894 return StartingSize + marshal_size;
895}
HRESULT WINAPI CoGetMarshalSizeMax(ULONG *size, REFIID riid, IUnknown *unk, DWORD dest_context, void *pvDestContext, DWORD mshlFlags)
Definition: marshal.c:440

◆ WdtpInterfacePointer_UserUnmarshal()

unsigned char *__RPC_USER WdtpInterfacePointer_UserUnmarshal ( ULONG pFlags,
unsigned char pBuffer,
IUnknown **  ppunk,
REFIID  riid 
)

Definition at line 974 of file usrmarshal.c.

975{
976 HRESULT hr;
977 HGLOBAL h;
978 IStream *stm;
979 DWORD size;
980 void *ptr;
981 IUnknown *orig;
982
983 TRACE("%s, %p, %p, %s.\n", debugstr_user_flags(pFlags), pBuffer, ppunk, debugstr_guid(riid));
984
986
987 size = *(DWORD *)pBuffer;
988 pBuffer += sizeof(DWORD);
989 if (size != *(DWORD *)pBuffer)
991
992 pBuffer += sizeof(DWORD);
993
994 /* FIXME: sanity check on size */
995
997 if (!h) RaiseException(RPC_X_NO_MEMORY, 0, 0, NULL);
998
999 if (CreateStreamOnHGlobal(h, TRUE, &stm) != S_OK)
1000 {
1001 GlobalFree(h);
1003 }
1004
1005 ptr = GlobalLock(h);
1007 GlobalUnlock(h);
1008
1009 orig = *ppunk;
1010 hr = CoUnmarshalInterface(stm, riid, (void**)ppunk);
1011 IStream_Release(stm);
1012
1013 if (hr != S_OK) RaiseException(hr, 0, 0, NULL);
1014
1015 if (orig) IUnknown_Release(orig);
1016
1017 return pBuffer + size;
1018}
HRESULT WINAPI CoUnmarshalInterface(IStream *stream, REFIID riid, void **ppv)
Definition: marshal.c:793
VOID WINAPI RaiseException(_In_ DWORD dwExceptionCode, _In_ DWORD dwExceptionFlags, _In_ DWORD nNumberOfArguments, _In_opt_ const ULONG_PTR *lpArguments)
Definition: except.c:700
#define RPC_X_NO_MEMORY
Definition: rpcnterr.h:35
#define RPC_X_BAD_STUB_DATA
Definition: winerror.h:1447

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ole  )

◆ wire_extra_user_size()

static ULONG wire_extra_user_size ( ULONG pFlags,
ULONG  Start,
VARIANT pvar 
)
static

Definition at line 287 of file usrmarshal.c.

288{
289 if (V_ISARRAY(pvar))
290 {
291 if (V_ISBYREF(pvar))
292 return LPSAFEARRAY_UserSize(pFlags, Start, V_ARRAYREF(pvar));
293 else
294 return LPSAFEARRAY_UserSize(pFlags, Start, &V_ARRAY(pvar));
295 }
296
297 switch (V_VT(pvar)) {
298 case VT_BSTR:
299 return BSTR_UserSize(pFlags, Start, &V_BSTR(pvar));
300 case VT_BSTR | VT_BYREF:
301 return BSTR_UserSize(pFlags, Start, V_BSTRREF(pvar));
302 case VT_VARIANT | VT_BYREF:
303 return VARIANT_UserSize(pFlags, Start, V_VARIANTREF(pvar));
304 case VT_UNKNOWN:
305 return interface_user_size(pFlags, Start, &IID_IUnknown, V_UNKNOWN(pvar));
306 case VT_UNKNOWN | VT_BYREF:
307 return interface_user_size(pFlags, Start, &IID_IUnknown, *V_UNKNOWNREF(pvar));
308 case VT_DISPATCH:
309 return interface_user_size(pFlags, Start, &IID_IDispatch, (IUnknown*)V_DISPATCH(pvar));
310 case VT_DISPATCH | VT_BYREF:
312 case VT_RECORD:
313 FIXME("wire-size record\n");
314 return Start;
315 case VT_SAFEARRAY:
316 case VT_SAFEARRAY | VT_BYREF:
317 FIXME("wire-size safearray: shouldn't be marshaling this\n");
318 return Start;
319 default:
320 return Start;
321 }
322}
ULONG WINAPI LPSAFEARRAY_UserSize(ULONG *pFlags, ULONG StartingSize, LPSAFEARRAY *ppsa)
Definition: usrmarshal.c:785
#define V_ISARRAY(A)
Definition: oleauto.h:218

Referenced by VARIANT_UserSize().