28#define USE_STUBLESS_PROXY
44#define WRITE_CHAR(str, len, val) \
45 do { if ((str)) (str)[(len)] = (val); (len)++; } while (0)
46#define WRITE_SHORT(str, len, val) \
47 do { if ((str)) *((short *)((str) + (len))) = (val); (len) += 2; } while (0)
48#define WRITE_INT(str, len, val) \
49 do { if ((str)) *((int *)((str) + (len))) = (val); (len) += 4; } while (0)
61 const unsigned char *
format =
proxy->ProcFormatString +
proxy->FormatStringOffset[3];
72 if (
header->Oi2Flags.HasExtensions)
77 *nb_params =
header->number_of_params;
83 unsigned int nb_params;
92 unsigned int nb_params;
137 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
138 ITypeInfo_GetTypeAttr(refinfo, &
attr);
145 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
146 ITypeInfo_Release(refinfo);
181 return sizeof(
void *);
188 for (
i = 0;
i <
desc->lpadesc->cDims;
i++)
189 size *=
desc->lpadesc->rgbounds[
i].cElements;
194 unsigned int size = 0;
198 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
199 ITypeInfo_GetTypeAttr(refinfo, &
attr);
201 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
202 ITypeInfo_Release(refinfo);
219 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
220 ITypeInfo_GetTypeAttr(refinfo, &
attr);
229 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
230 ITypeInfo_Release(refinfo);
267 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
268 ITypeInfo_GetTypeAttr(refinfo, &
attr);
270 switch (
attr->typekind)
287 FIXME(
"Unhandled kind %#x.\n",
attr->typekind);
292 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
293 ITypeInfo_Release(refinfo);
300 FIXME(
"Unhandled type %u.\n", tdesc->vt);
314 for (
i = 0;
i <
attr->cVars;
i++)
344 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
345 ITypeInfo_GetTypeAttr(refinfo, &
attr);
356 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
357 ITypeInfo_Release(refinfo);
376 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
377 ITypeInfo_GetTypeAttr(refinfo, &
attr);
384 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
385 ITypeInfo_Release(refinfo);
396 unsigned int struct_offset = 0;
397 unsigned char basetype;
402 for (
i = 0;
i <
attr->cVars;
i++)
405 tdesc = &
desc->elemdescVar.tdesc;
410 if ((struct_offset & 7) && !(
desc->oInst & 7))
412 else if ((struct_offset & 3) && !(
desc->oInst & 3))
414 else if ((struct_offset & 1) && !(
desc->oInst & 1))
452 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
453 ITypeInfo_GetTypeAttr(refinfo, &
attr);
458 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
459 ITypeInfo_Release(refinfo);
468 TYPEDESC *
desc,
unsigned char *
str,
size_t *
len)
470 unsigned char basetype;
495 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
496 ITypeInfo_GetTypeAttr(refinfo, &
attr);
501 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
502 ITypeInfo_Release(refinfo);
507 TYPEDESC *
desc,
unsigned char *
str,
size_t *
len)
520 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
521 ITypeInfo_GetTypeAttr(refinfo, &
attr);
526 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
527 ITypeInfo_Release(refinfo);
538 size_t pointer_layout_offset, pointer_layout, member_layout,
ref;
539 unsigned int struct_offset = 0;
545 pointer_layout_offset = *
len;
547 member_layout = *
len;
556 pointer_layout = *
len;
557 if (
str) *((
short *)(
str + pointer_layout_offset)) = pointer_layout - pointer_layout_offset;
559 for (
i = 0;
i <
attr->cVars;
i++)
570 for (
i = 0;
i <
attr->cVars;
i++)
573 tdesc = &
desc->elemdescVar.tdesc;
575 if (struct_offset !=
desc->oInst)
586 if (
str) *((
short *)(
str + pointer_layout + 2)) =
ref - (pointer_layout + 2);
593 if (
str) *((
short *)(
str + member_layout + 2)) =
ref - (member_layout + 2);
627 unsigned char basetype;
679 *
len += 2 +
sizeof(*iid);
694 if (
flags & IMPLTYPEFLAG_FDEFAULT)
702 ITypeInfo_GetRefTypeOfImplType(
typeinfo,
i, &reftype);
703 ITypeInfo_GetRefTypeInfo(
typeinfo, reftype, &refinfo);
704 ITypeInfo_GetTypeAttr(refinfo, &
attr);
706 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
707 ITypeInfo_Release(refinfo);
713 unsigned char basetype,
flags = 0;
721 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
722 ITypeInfo_GetTypeAttr(refinfo, &
attr);
724 switch (
attr->typekind)
753 FIXME(
"unhandled kind %#x\n",
attr->typekind);
758 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
759 ITypeInfo_Release(refinfo);
806 ITypeInfo_GetRefTypeInfo(
typeinfo,
desc->hreftype, &refinfo);
807 ITypeInfo_GetTypeAttr(refinfo, &
attr);
809 switch (
attr->typekind)
823 FIXME(
"unhandled kind %u\n",
attr->typekind);
829 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
830 ITypeInfo_Release(refinfo);
846#if defined(__i386__) || defined(__arm__)
848 return sizeof(
void *);
851 return sizeof(
void *);
857static const unsigned short IsIn = 0x0008;
858static const unsigned short IsOut = 0x0010;
865 int is_out,
unsigned short *server_size,
unsigned short *
flags,
866 unsigned char *basetype, TYPEDESC **tfs_tdesc)
878 *server_size =
sizeof(
void *);
885 *server_size =
sizeof(
void *);
888 *server_size =
sizeof(
void *);
896 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
897 ITypeInfo_GetTypeAttr(refinfo, &
attr);
899 switch (
attr->typekind)
903 if (!is_in && is_out)
904 *server_size =
sizeof(
void *);
909 if (!is_in && is_out)
910 *server_size =
attr->cbSizeInstance;
920 is_out, server_size,
flags, basetype, tfs_tdesc);
923 FIXME(
"unhandled kind %#x\n",
attr->typekind);
928 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
929 ITypeInfo_Release(refinfo);
934 if (!is_in && is_out)
945 int is_out,
unsigned short *server_size,
unsigned short *
flags,
946 unsigned char *basetype, TYPEDESC **tfs_tdesc)
957 TRACE(
"vt %u\n", tdesc->vt);
962#if !defined(__i386__) && !defined(__arm__)
979 server_size,
flags, basetype, tfs_tdesc);
981 ITypeInfo_GetRefTypeInfo(
typeinfo, tdesc->hreftype, &refinfo);
982 ITypeInfo_GetTypeAttr(refinfo, &
attr);
984 switch (
attr->typekind)
991#if defined(__i386__) || defined(__arm__)
994 if (
attr->cbSizeInstance <= 8)
1002 server_size,
flags, basetype, tfs_tdesc);
1005 FIXME(
"unhandled kind %#x\n",
attr->typekind);
1010 ITypeInfo_ReleaseTypeAttr(refinfo,
attr);
1011 ITypeInfo_Release(refinfo);
1018 FIXME(
"unhandled type %u\n", tdesc->vt);
1028 size_t *typelen,
unsigned char *
proc,
size_t *proclen, ELEMDESC *
desc,
1031 USHORT param_flags =
desc->paramdesc.wParamFlags;
1032 TYPEDESC *tdesc = &
desc->tdesc, *tfs_tdesc;
1033 unsigned short server_size;
1035 unsigned char basetype;
1036 unsigned short flags;
1041 is_out = param_flags & PARAMFLAG_FOUT;
1042 is_in = (param_flags & PARAMFLAG_FIN) || (!is_out && !is_return);
1045 &basetype, &tfs_tdesc);
1051 server_size = (server_size + 7) / 8;
1052 if (server_size >= 8) server_size = 0;
1053 flags |= server_size << 13;
1071 WORD proc_idx,
unsigned char *
proc,
size_t *proclen)
1073 unsigned short stack_size = 2 *
sizeof(
void *);
1075 unsigned short float_mask = 0;
1076 unsigned char basetype;
1083 for (param_idx = 0; param_idx <
desc->cParams; param_idx++)
1101 for (param_idx = 0; param_idx <
desc->cParams && param_idx < 3; param_idx++)
1105 float_mask |= (1 << ((param_idx + 1) * 2));
1107 float_mask |= (2 << ((param_idx + 1) * 2));
1114 unsigned char *
type,
size_t *typelen,
unsigned char *
proc,
1115 size_t *proclen,
unsigned short *
offset)
1118 WORD proc_idx, param_idx;
1122 for (proc_idx = 3; proc_idx < parentfuncs; proc_idx++)
1125 offset[proc_idx - 3] = -1;
1128 for (proc_idx = 0; proc_idx <
funcs; proc_idx++)
1130 TRACE(
"Writing procedure %d.\n", proc_idx);
1136 offset[proc_idx + parentfuncs - 3] = *proclen;
1141 for (param_idx = 0; param_idx <
desc->cParams; param_idx++)
1143 TRACE(
"Writing parameter %d.\n", param_idx);
1163 WORD parentfuncs,
const unsigned char **type_ret,
1164 const unsigned char **proc_ret,
unsigned short **offset_ret)
1168 size_t typelen = tfs_size, proclen = 0;
1181 ERR(
"Failed to allocate format strings.\n");
1222 hr = ITypeInfo_GetTypeAttr(*
typeinfo, &typeattr);
1225 typekind = typeattr->typekind;
1226 ITypeInfo_ReleaseTypeAttr(*
typeinfo, typeattr);
1229 hr = ITypeInfo_GetRefTypeOfImplType(*
typeinfo, -1, &reftype);
1233 hr = ITypeInfo_GetRefTypeInfo(*
typeinfo, reftype, &real_typeinfo);
1245 hr = ITypeLib_GetLibAttr(
typelib, &libattr);
1251 syskind = libattr->syskind;
1252 ITypeLib_ReleaseTLibAttr(
typelib, libattr);
1255 hr = ITypeInfo_GetTypeAttr(*
typeinfo, &typeattr);
1258 *
funcs = typeattr->cFuncs;
1259 *parentfuncs = typeattr->cbSizeVft / (syskind ==
SYS_WIN64 ? 8 : 4) - *
funcs;
1260 ITypeInfo_ReleaseTypeAttr(*
typeinfo, typeattr);
1262 hr = ITypeInfo_GetRefTypeOfImplType(*
typeinfo, 0, &reftype);
1265 hr = ITypeInfo_GetRefTypeInfo(*
typeinfo, reftype, &parentinfo);
1268 hr = ITypeInfo_GetTypeAttr(parentinfo, &typeattr);
1271 *parentiid = typeattr->guid;
1272 ITypeInfo_ReleaseTypeAttr(parentinfo, typeattr);
1273 ITypeInfo_Release(parentinfo);
1282 desc->Version = 0x50002;
1302 TRACE(
"(%p) decreasing refs to %d\n",
proxy, refcount);
1306 if (
proxy->proxy.pChannel)
1307 IRpcProxyBuffer_Disconnect(&
proxy->proxy.IRpcProxyBuffer_iface);
1308 if (
proxy->proxy.base_object)
1309 IUnknown_Release(
proxy->proxy.base_object);
1310 if (
proxy->proxy.base_proxy)
1311 IRpcProxyBuffer_Release(
proxy->proxy.base_proxy);
1339 proxy->proxy.PVtbl =
proxy->proxy_vtbl->Vtbl;
1340 proxy->proxy.RefCount = 1;
1341 proxy->proxy.piid =
proxy->proxy_vtbl->header.piid;
1342 proxy->proxy.pUnkOuter = outer;
1347 (
void **)&
proxy->proxy.base_object);
1351 *proxy_buffer = &
proxy->proxy.IRpcProxyBuffer_iface;
1366 TRACE(
"typeinfo %p, outer %p, iid %s, proxy_buffer %p, out %p.\n",
1373 if (!(
proxy = heap_alloc_zero(
sizeof(*
proxy))))
1375 ERR(
"Failed to allocate proxy object.\n");
1380 proxy->proxy_info.pStubDesc = &
proxy->stub_desc;
1382 proxy->proxy_vtbl = heap_alloc_zero(
sizeof(
proxy->proxy_vtbl->header) + (
funcs + parentfuncs) *
sizeof(
void *));
1383 if (!
proxy->proxy_vtbl)
1385 ERR(
"Failed to allocate proxy vtbl.\n");
1389 proxy->proxy_vtbl->header.pStublessProxyInfo = &
proxy->proxy_info;
1391 proxy->proxy_vtbl->header.piid = &
proxy->iid;
1394 proxy->proxy_vtbl->Vtbl[parentfuncs +
i] = (
void *)-1;
1397 &
proxy->proxy_info.ProcFormatString, &
proxy->offset_table);
1404 proxy->proxy_info.FormatStringOffset = &
proxy->offset_table[-3];
1435 TRACE(
"(%p) decreasing refs to %d\n",
stub, refcount);
1441 IRpcStubBuffer_Disconnect(iface);
1443 if (
stub->stub.base_stub)
1445 IRpcStubBuffer_Release(
stub->stub.base_stub);
1464 hr = IUnknown_QueryInterface(
server,
stub->stub_vtbl.header.piid,
1465 (
void **)&
stub->stub.stub_buffer.pvServerObject);
1468 WARN(
"Failed to get interface %s, hr %#x.\n",
1470 stub->stub.stub_buffer.pvServerObject =
server;
1481 IUnknown_Release(
stub->stub.stub_buffer.pvServerObject);
1486 stub->stub.stub_buffer.lpVtbl = &
stub->stub_vtbl.Vtbl;
1487 stub->stub.stub_buffer.RefCount = 1;
1501 TRACE(
"typeinfo %p, iid %s, server %p, stub_buffer %p.\n",
1508 if (!(
stub = heap_alloc_zero(
sizeof(*
stub))))
1510 ERR(
"Failed to allocate stub object.\n");
1515 stub->server_info.pStubDesc = &
stub->stub_desc;
1518 &
stub->server_info.ProcString, &
stub->offset_table);
1524 stub->server_info.FmtStringOffset = &
stub->offset_table[-3];
1527 stub->stub_vtbl.header.piid = &
stub->iid;
1528 stub->stub_vtbl.header.pServerInfo = &
stub->server_info;
1529 stub->stub_vtbl.header.DispatchTableCount =
funcs + parentfuncs;
1534 for (
i = 3;
i < parentfuncs;
i++)
1538 stub->stub_vtbl.header.pDispatchTable = &
stub->dispatch_table[-3];
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HRESULT WINAPI StdProxy_QueryInterface(IRpcProxyBuffer *iface, REFIID riid, void **obj)
void WINAPI StdProxy_Disconnect(IRpcProxyBuffer *iface)
HRESULT WINAPI StdProxy_Connect(IRpcProxyBuffer *iface, IRpcChannelBuffer *pChannel)
BOOL fill_stubless_table(IUnknownVtbl *vtbl, DWORD num)
ULONG WINAPI StdProxy_AddRef(IRpcProxyBuffer *iface)
void release_delegating_vtbl(IUnknownVtbl *vtbl) DECLSPEC_HIDDEN
HRESULT create_proxy(REFIID iid, IUnknown *pUnkOuter, IRpcProxyBuffer **pproxy, void **ppv) DECLSPEC_HIDDEN
IUnknownVtbl * get_delegating_vtbl(DWORD num_methods) DECLSPEC_HIDDEN
BOOL fill_delegated_proxy_table(IUnknownVtbl *vtbl, DWORD num) DECLSPEC_HIDDEN
HRESULT create_stub(REFIID iid, IUnknown *pUnk, IRpcStubBuffer **ppstub) DECLSPEC_HIDDEN
struct tagVARIANT VARIANT
static const WCHAR *const ext[]
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
const IRpcStubBufferVtbl CStdStubBuffer_Delegating_Vtbl
void __RPC_STUB NdrStubForwardingFunction(IRpcStubBuffer *iface, IRpcChannelBuffer *pChannel, PRPC_MESSAGE pMsg, DWORD *pdwStubPhase)
const IRpcStubBufferVtbl CStdStubBuffer_Vtbl
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLenum const GLfloat * params
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
#define memcpy(s1, s2, n)
static const WCHAR desc[]
static OLECHAR OLECHAR *static SYSKIND
void *WINAPI NdrOleAllocate(SIZE_T Size)
void WINAPI NdrOleFree(void *NodeToFree)
LONG WINAPI NdrStubCall2(struct IRpcStubBuffer *pThis, struct IRpcChannelBuffer *pChannel, PRPC_MESSAGE pRpcMsg, DWORD *pdwStubPhase)
struct _NDR_PROC_HEADER_RPC NDR_PROC_HEADER_RPC
struct _NDR_PROC_HEADER NDR_PROC_HEADER
static const unsigned short IsReturn
static ULONG WINAPI typelib_stub_Release(IRpcStubBuffer *iface)
static HRESULT build_format_strings(ITypeInfo *typeinfo, WORD funcs, WORD parentfuncs, const unsigned char **type_ret, const unsigned char **proc_ret, unsigned short **offset_ret)
static const IRpcProxyBufferVtbl typelib_proxy_vtbl
static const unsigned short IsBasetype
#define WRITE_CHAR(str, len, val)
#define WRITE_SHORT(str, len, val)
static const MIDL_STUBLESS_PROXY_INFO * get_ndr_types_proxy_info(void)
static const unsigned short IsSimpleRef
static unsigned char get_array_fc(ITypeInfo *typeinfo, TYPEDESC *desc)
static const unsigned short IsOut
static size_t write_ip_tfs(unsigned char *str, size_t *len, const GUID *iid)
static const unsigned short MustSize
#define WRITE_INT(str, len, val)
static unsigned char get_struct_member_fc(ITypeInfo *typeinfo, TYPEDESC *tdesc)
static unsigned char get_basetype(ITypeInfo *typeinfo, TYPEDESC *desc)
static size_t write_complex_struct_pointer_ref(ITypeInfo *typeinfo, TYPEDESC *desc, unsigned char *str, size_t *len)
static void write_complex_struct_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static const unsigned short MustFree
static void write_complex_struct_pointer_layout(ITypeInfo *typeinfo, TYPEDESC *desc, unsigned char *str, size_t *len)
static void write_simple_struct_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static unsigned short get_tfs_offset(int param)
static HRESULT get_iface_info(ITypeInfo **typeinfo, WORD *funcs, WORD *parentfuncs, GUID *parentiid)
const ExtendedProxyFileInfo ndr_types_ProxyFileInfo
static BOOL type_pointer_is_iface(ITypeInfo *typeinfo, TYPEDESC *tdesc)
static ULONG WINAPI typelib_proxy_Release(IRpcProxyBuffer *iface)
static unsigned char get_struct_fc(ITypeInfo *typeinfo, TYPEATTR *attr)
static const unsigned short IsByValue
static HRESULT write_iface_fs(ITypeInfo *typeinfo, WORD funcs, WORD parentfuncs, unsigned char *type, size_t *typelen, unsigned char *proc, size_t *proclen, unsigned short *offset)
static unsigned short get_stack_size(ITypeInfo *typeinfo, TYPEDESC *desc)
HRESULT WINAPI CreateStubFromTypeInfo(ITypeInfo *typeinfo, REFIID iid, IUnknown *server, IRpcStubBuffer **stub_buffer)
HRESULT WINAPI CreateProxyFromTypeInfo(ITypeInfo *typeinfo, IUnknown *outer, REFIID iid, IRpcProxyBuffer **proxy_buffer, void **out)
static HRESULT write_param_fs(ITypeInfo *typeinfo, unsigned char *type, size_t *typelen, unsigned char *proc, size_t *proclen, ELEMDESC *desc, BOOL is_return, unsigned short *stack_offset)
static unsigned short write_oleaut_tfs(VARTYPE vt)
static void write_proc_func_header(ITypeInfo *typeinfo, FUNCDESC *desc, WORD proc_idx, unsigned char *proc, size_t *proclen)
static void init_stub_desc(MIDL_STUB_DESC *desc)
static size_t write_struct_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static const unsigned short IsIn
static size_t write_array_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, ARRAYDESC *desc)
static HRESULT get_param_pointer_info(ITypeInfo *typeinfo, TYPEDESC *tdesc, int is_in, int is_out, unsigned short *server_size, unsigned short *flags, unsigned char *basetype, TYPEDESC **tfs_tdesc)
static void write_struct_members(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEATTR *attr)
static const NDR_PARAM_OIF * get_ndr_types_params(unsigned int *nb_params)
static size_t write_pointer_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEDESC *desc, BOOL toplevel, BOOL onstack)
static HRESULT typelib_stub_init(struct typelib_stub *stub, IUnknown *server, const GUID *parentiid, IRpcStubBuffer **stub_buffer)
static HRESULT get_param_info(ITypeInfo *typeinfo, TYPEDESC *tdesc, int is_in, int is_out, unsigned short *server_size, unsigned short *flags, unsigned char *basetype, TYPEDESC **tfs_tdesc)
static void get_default_iface(ITypeInfo *typeinfo, WORD count, GUID *iid)
static BOOL type_needs_pointer_deref(ITypeInfo *typeinfo, TYPEDESC *desc)
static unsigned int type_memsize(ITypeInfo *typeinfo, TYPEDESC *desc)
static size_t write_type_tfs(ITypeInfo *typeinfo, unsigned char *str, size_t *len, TYPEDESC *desc, BOOL toplevel, BOOL onstack)
static BOOL type_is_non_iface_pointer(ITypeInfo *typeinfo, TYPEDESC *desc)
static const unsigned char * get_type_format_string(size_t *size)
static HRESULT typelib_proxy_init(struct typelib_proxy *proxy, IUnknown *outer, ULONG count, const GUID *parentiid, IRpcProxyBuffer **proxy_buffer, void **out)
#define IsEqualGUID(rguid1, rguid2)
#define FC_SIMPLE_POINTER
#define Oi_OBJ_USE_V2_INTERPRETER
#define FC_ALLOCED_ON_STACK
void(__RPC_STUB * PRPC_STUB_FUNCTION)(IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *pdwStubPhase)
static struct __wine_debug_functions funcs
PMIDL_STUB_DESC pStubDesc
const unsigned char * pFormatTypes
const USER_MARSHAL_ROUTINE_QUADRUPLE * aUserMarshalQuadruple
CInterfaceProxyHeader header
const PCInterfaceProxyVtblList * pProxyVtblList
CInterfaceProxyVtbl * proxy_vtbl
unsigned short * offset_table
MIDL_STUBLESS_PROXY_INFO proxy_info
MIDL_SERVER_INFO server_info
PRPC_STUB_FUNCTION * dispatch_table
CInterfaceStubVtbl stub_vtbl
cstdstubbuffer_delegating_t stub
unsigned short * offset_table
#define CONTAINING_RECORD(address, type, field)
static unsigned stack_offset(compile_ctx_t *ctx)
static rfbScreenInfoPtr server
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out