64 memcpy(&V_ ## x(pvar), src, sizeof(V_ ## x(pvar))); \
89 FIXME(
"Not supported type: %d\n",
vt);
109#define CASE_COPY(x) \
111 memcpy(dest, &V_ ## x(&var), sizeof(V_ ## x(&var))); \
152 IRecordInfo_AddRef(iface);
164 TRACE(
"%p, refcount %lu.\n", iface,
ref);
173 TRACE(
"%p, refcount %lu.\n", iface,
ref);
181 ITypeInfo_Release(
This->pTypeInfo);
210 for(
i=0;
i<
This->n_vars;
i++) {
211 if(
This->fields[
i].varkind != VAR_PERINSTANCE) {
212 ERR(
"varkind != VAR_PERINSTANCE\n");
216 switch(
This->fields[
i].vt) {
252 IUnknown_Release(unk);
257 FIXME(
"Not supported vt = %d\n",
This->fields[
i].vt);
271 TRACE(
"(%p)->(%p %p)\n",
This, src_rec, dest_rec);
273 if(!src_rec || !dest_rec)
277 IRecordInfo_RecordClear(iface, dest_rec);
279 for (
i = 0;
i <
This->n_vars;
i++)
283 if (
This->fields[
i].varkind != VAR_PERINSTANCE) {
284 ERR(
"varkind != VAR_PERINSTANCE\n");
290 switch (
This->fields[
i].vt)
312 if (unk) IUnknown_AddRef(unk);
331 IRecordInfo_RecordClear(iface, dest_rec);
371 *pcbSize =
This->size;
384 ITypeInfo_AddRef(
This->pTypeInfo);
385 *ppTypeInfo =
This->pTypeInfo;
391 LPCOLESTR szFieldName,
VARIANT *pvarField)
398 if(!
pvData || !szFieldName || !pvarField)
404 if(
i ==
This->n_vars)
413 LPCOLESTR szFieldName,
VARIANT *pvarField,
PVOID *ppvDataCArray)
420 if(!
pvData || !szFieldName || !pvarField)
426 if(
i ==
This->n_vars)
432 *ppvDataCArray =
NULL;
437 LPCOLESTR szFieldName,
VARIANT *pvarField)
444 if(!
pvData || !szFieldName || !pvarField
445 || (
wFlags != INVOKE_PROPERTYPUTREF &&
wFlags != INVOKE_PROPERTYPUT))
448 if(
wFlags == INVOKE_PROPERTYPUTREF) {
449 FIXME(
"wFlag == INVOKE_PROPERTYPUTREF not supported\n");
456 if(
i ==
This->n_vars)
471 if(!
pvData || !szFieldName || !pvarField
472 || (
wFlags != INVOKE_PROPERTYPUTREF &&
wFlags != INVOKE_PROPERTYPUT))
478 if(
i ==
This->n_vars)
490 TRACE(
"(%p)->(%p %p)\n",
This, pcNames, rgBstrNames);
514 IRecordInfo_GetGuid( info2, &
guid2 );
526 IRecordInfo_RecordInit(iface,
record);
536 TRACE(
"(%p)->(%p %p)\n",
This, pvSource, ppvDest);
538 if(!pvSource || !ppvDest)
541 *ppvDest = IRecordInfo_RecordCreate(iface);
542 return IRecordInfo_RecordCopy(iface, pvSource, *ppvDest);
552 hres = IRecordInfo_RecordClear(iface, pvRecord);
596 TRACE(
"%s, %lu, %lu, %#lx, %s, %p.\n",
debugstr_guid(rGuidTypeLib), uVerMajor, uVerMinor,
601 WARN(
"LoadRegTypeLib failed!\n");
605 hres = ITypeLib_GetTypeInfoOfGuid(pTypeLib, rGuidTypeInfo, &pTypeInfo);
606 ITypeLib_Release(pTypeLib);
608 WARN(
"GetTypeInfoOfGuid failed!\n");
613 ITypeInfo_Release(pTypeInfo);
628 TRACE(
"(%p %p)\n", pTI, ppRecInfo);
630 if(!pTI || !ppRecInfo)
633 hres = ITypeInfo_GetTypeAttr(pTI, &typeattr);
635 WARN(
"GetTypeAttr failed: %#lx.\n",
hres);
640 hres = ITypeInfo_GetRefTypeInfo(pTI, typeattr->tdescAlias.hreftype, &pTypeInfo);
641 guid = typeattr->guid;
642 ITypeInfo_ReleaseTypeAttr(pTI, typeattr);
644 WARN(
"GetRefTypeInfo failed: %#lx.\n",
hres);
647 hres = ITypeInfo_GetTypeAttr(pTypeInfo, &typeattr);
649 ITypeInfo_Release(pTypeInfo);
650 WARN(
"GetTypeAttr failed for referenced type: %#lx.\n",
hres);
655 ITypeInfo_AddRef(pTypeInfo);
656 guid = typeattr->guid;
660 WARN(
"typekind != TKIND_RECORD\n");
661 ITypeInfo_ReleaseTypeAttr(pTypeInfo, typeattr);
662 ITypeInfo_Release(pTypeInfo);
669 ret->pTypeInfo = pTypeInfo;
670 ret->n_vars = typeattr->cVars;
671 ret->size = typeattr->cbSizeInstance;
672 ITypeInfo_ReleaseTypeAttr(pTypeInfo, typeattr);
682 WARN(
"ITypeInfo::GetDocumentation failed\n");
687 for(
i = 0;
i<
ret->n_vars;
i++) {
689 hres = ITypeInfo_GetVarDesc(pTypeInfo,
i, &vardesc);
691 WARN(
"GetVarDesc failed\n");
694 ret->fields[
i].vt = vardesc->elemdescVar.tdesc.vt;
695 ret->fields[
i].varkind = vardesc->varkind;
696 ret->fields[
i].offset = vardesc->oInst;
697 hres = ITypeInfo_GetDocumentation(pTypeInfo, vardesc->memid, &
ret->fields[
i].name,
700 WARN(
"GetDocumentation failed: %#lx.\n",
hres);
702 ITypeInfo_ReleaseVarDesc(pTypeInfo, vardesc);
705 *ppRecInfo = &
ret->IRecordInfo_iface;
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
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
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
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)
#define R4(v, w, x, y, z, i)
IRecordInfo IRecordInfo_iface
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, const VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
#define TYPE_E_FIELDNOTFOUND