22#define NONAMELESSUNION
66 memcpy(&V_ ## x(pvar), src, sizeof(V_ ## x(pvar))); \
91 FIXME(
"Not supported type: %d\n",
vt);
111#define CASE_COPY(x) \
113 memcpy(dest, &V_ ## x(&var), sizeof(V_ ## x(&var))); \
154 IRecordInfo_AddRef(iface);
183 ITypeInfo_Release(
This->pTypeInfo);
212 for(
i=0;
i<
This->n_vars;
i++) {
213 if(
This->fields[
i].varkind != VAR_PERINSTANCE) {
214 ERR(
"varkind != VAR_PERINSTANCE\n");
218 switch(
This->fields[
i].vt) {
254 IUnknown_Release(unk);
259 FIXME(
"Not supported vt = %d\n",
This->fields[
i].vt);
273 TRACE(
"(%p)->(%p %p)\n",
This, src_rec, dest_rec);
275 if(!src_rec || !dest_rec)
279 IRecordInfo_RecordClear(iface, dest_rec);
281 for (
i = 0;
i <
This->n_vars;
i++)
285 if (
This->fields[
i].varkind != VAR_PERINSTANCE) {
286 ERR(
"varkind != VAR_PERINSTANCE\n");
292 switch (
This->fields[
i].vt)
314 if (unk) IUnknown_AddRef(unk);
333 IRecordInfo_RecordClear(iface, dest_rec);
373 *pcbSize =
This->size;
386 ITypeInfo_AddRef(
This->pTypeInfo);
387 *ppTypeInfo =
This->pTypeInfo;
393 LPCOLESTR szFieldName,
VARIANT *pvarField)
400 if(!
pvData || !szFieldName || !pvarField)
406 if(
i ==
This->n_vars)
415 LPCOLESTR szFieldName,
VARIANT *pvarField,
PVOID *ppvDataCArray)
422 if(!
pvData || !szFieldName || !pvarField)
428 if(
i ==
This->n_vars)
434 *ppvDataCArray =
NULL;
439 LPCOLESTR szFieldName,
VARIANT *pvarField)
447 if(!
pvData || !szFieldName || !pvarField
448 || (
wFlags != INVOKE_PROPERTYPUTREF &&
wFlags != INVOKE_PROPERTYPUT))
451 if(
wFlags == INVOKE_PROPERTYPUTREF) {
452 FIXME(
"wFlag == INVOKE_PROPERTYPUTREF not supported\n");
459 if(
i ==
This->n_vars)
474 if(!
pvData || !szFieldName || !pvarField
475 || (
wFlags != INVOKE_PROPERTYPUTREF &&
wFlags != INVOKE_PROPERTYPUT))
481 if(
i ==
This->n_vars)
493 TRACE(
"(%p)->(%p %p)\n",
This, pcNames, rgBstrNames);
517 IRecordInfo_GetGuid( info2, &
guid2 );
529 IRecordInfo_RecordInit(iface,
record);
539 TRACE(
"(%p)->(%p %p)\n",
This, pvSource, ppvDest);
541 if(!pvSource || !ppvDest)
544 *ppvDest = IRecordInfo_RecordCreate(iface);
545 return IRecordInfo_RecordCopy(iface, pvSource, *ppvDest);
555 hres = IRecordInfo_RecordClear(iface, pvRecord);
601 TRACE(
"(%p,%d,%d,%d,%s,%p)\n", rGuidTypeLib, uVerMajor, uVerMinor,
606 WARN(
"LoadRegTypeLib failed!\n");
610 hres = ITypeLib_GetTypeInfoOfGuid(pTypeLib, rGuidTypeInfo, &pTypeInfo);
611 ITypeLib_Release(pTypeLib);
613 WARN(
"GetTypeInfoOfGuid failed!\n");
618 ITypeInfo_Release(pTypeInfo);
633 TRACE(
"(%p %p)\n", pTI, ppRecInfo);
635 if(!pTI || !ppRecInfo)
638 hres = ITypeInfo_GetTypeAttr(pTI, &typeattr);
640 WARN(
"GetTypeAttr failed: %08x\n",
hres);
645 hres = ITypeInfo_GetRefTypeInfo(pTI, typeattr->tdescAlias.u.hreftype, &pTypeInfo);
646 guid = typeattr->guid;
647 ITypeInfo_ReleaseTypeAttr(pTI, typeattr);
649 WARN(
"GetRefTypeInfo failed: %08x\n",
hres);
652 hres = ITypeInfo_GetTypeAttr(pTypeInfo, &typeattr);
654 ITypeInfo_Release(pTypeInfo);
655 WARN(
"GetTypeAttr failed for referenced type: %08x\n",
hres);
660 ITypeInfo_AddRef(pTypeInfo);
661 guid = typeattr->guid;
665 WARN(
"typekind != TKIND_RECORD\n");
666 ITypeInfo_ReleaseTypeAttr(pTypeInfo, typeattr);
667 ITypeInfo_Release(pTypeInfo);
674 ret->pTypeInfo = pTypeInfo;
675 ret->n_vars = typeattr->cVars;
676 ret->size = typeattr->cbSizeInstance;
677 ITypeInfo_ReleaseTypeAttr(pTypeInfo, typeattr);
687 WARN(
"ITypeInfo::GetDocumentation failed\n");
692 for(
i = 0;
i<
ret->n_vars;
i++) {
694 hres = ITypeInfo_GetVarDesc(pTypeInfo,
i, &vardesc);
696 WARN(
"GetVarDesc failed\n");
699 ret->fields[
i].vt = vardesc->elemdescVar.tdesc.vt;
700 ret->fields[
i].varkind = vardesc->varkind;
701 ret->fields[
i].offset = vardesc->u.oInst;
702 hres = ITypeInfo_GetDocumentation(pTypeInfo, vardesc->memid, &
ret->fields[
i].name,
705 WARN(
"GetDocumentation failed: %08x\n",
hres);
707 ITypeInfo_ReleaseVarDesc(pTypeInfo, vardesc);
710 *ppRecInfo = &
ret->IRecordInfo_iface;
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define HeapFree(x, y, z)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
HRESULT WINAPI SafeArrayCopy(SAFEARRAY *psa, SAFEARRAY **ppsaOut)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
unsigned int get_type_size(ULONG *pFlags, VARTYPE vt)
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)
unsigned __int3264 UINT_PTR
BSTR WINAPI SysAllocString(LPCOLESTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define IsEqualGUID(rguid1, rguid2)
static HRESULT copy_from_variant(VARIANT *src, void *dest, enum VARENUM vt)
static HRESULT WINAPI IRecordInfoImpl_QueryInterface(IRecordInfo *iface, REFIID riid, void **ppvObject)
static HRESULT WINAPI IRecordInfoImpl_GetName(IRecordInfo *iface, BSTR *pbstrName)
static HRESULT WINAPI IRecordInfoImpl_GetTypeInfo(IRecordInfo *iface, ITypeInfo **ppTypeInfo)
static HRESULT WINAPI IRecordInfoImpl_GetFieldNoCopy(IRecordInfo *iface, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField, PVOID *ppvDataCArray)
static const IRecordInfoVtbl IRecordInfoImplVtbl
static HRESULT WINAPI IRecordInfoImpl_RecordCopy(IRecordInfo *iface, void *src_rec, void *dest_rec)
static IRecordInfoImpl * impl_from_IRecordInfo(IRecordInfo *iface)
static HRESULT WINAPI IRecordInfoImpl_PutField(IRecordInfo *iface, ULONG wFlags, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static HRESULT copy_to_variant(void *src, VARIANT *pvar, enum VARENUM vt)
static HRESULT WINAPI IRecordInfoImpl_GetSize(IRecordInfo *iface, ULONG *pcbSize)
static HRESULT WINAPI IRecordInfoImpl_GetFieldNames(IRecordInfo *iface, ULONG *pcNames, BSTR *rgBstrNames)
static ULONG WINAPI IRecordInfoImpl_AddRef(IRecordInfo *iface)
static HRESULT WINAPI IRecordInfoImpl_GetField(IRecordInfo *iface, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static HRESULT WINAPI IRecordInfoImpl_GetGuid(IRecordInfo *iface, GUID *pguid)
static ULONG WINAPI IRecordInfoImpl_Release(IRecordInfo *iface)
HRESULT WINAPI GetRecordInfoFromTypeInfo(ITypeInfo *pTI, IRecordInfo **ppRecInfo)
HRESULT WINAPI GetRecordInfoFromGuids(REFGUID rGuidTypeLib, ULONG uVerMajor, ULONG uVerMinor, LCID lcid, REFGUID rGuidTypeInfo, IRecordInfo **ppRecInfo)
static HRESULT WINAPI IRecordInfoImpl_RecordClear(IRecordInfo *iface, PVOID pvExisting)
static PVOID WINAPI IRecordInfoImpl_RecordCreate(IRecordInfo *iface)
static BOOL WINAPI IRecordInfoImpl_IsMatchingType(IRecordInfo *iface, IRecordInfo *info2)
static HRESULT WINAPI IRecordInfoImpl_PutFieldNoCopy(IRecordInfo *iface, ULONG wFlags, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static HRESULT WINAPI IRecordInfoImpl_RecordInit(IRecordInfo *iface, PVOID pvNew)
static HRESULT WINAPI IRecordInfoImpl_RecordDestroy(IRecordInfo *iface, PVOID pvRecord)
static HRESULT WINAPI IRecordInfoImpl_RecordCreateCopy(IRecordInfo *iface, PVOID pvSource, PVOID *ppvDest)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define R4(v, w, x, y, z, i)
IRecordInfo IRecordInfo_iface
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
_In_ DWORD _Out_ _In_ WORD wFlags
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
_In_ ULONG _In_opt_ PVOID pvData
#define TYPE_E_FIELDNOTFOUND