Wine-Devel
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 4 participants
- 84544 discussions
[PATCH 2/5] riched20: Use paragraph ptrs in the selection link check function.
by Huw Davies Oct. 30, 2020
by Huw Davies Oct. 30, 2020
Oct. 30, 2020
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/riched20/editor.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index 057d5a31ce6..2a3858ba038 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -2426,30 +2426,27 @@ ME_FilterEvent(ME_TextEditor *editor, UINT msg, WPARAM* wParam, LPARAM* lParam)
static void ME_UpdateSelectionLinkAttribute(ME_TextEditor *editor)
{
- ME_DisplayItem *startPara, *endPara;
- ME_DisplayItem *prev_para;
- ME_Cursor *from, *to;
- ME_Cursor start;
- int nChars;
+ ME_Paragraph *start_para, *end_para;
+ ME_Cursor *from, *to, start;
+ int num_chars;
if (!editor->AutoURLDetect_bEnable) return;
ME_GetSelection(editor, &from, &to);
/* Find paragraph previous to the one that contains start cursor */
- startPara = from->pPara;
- prev_para = startPara->member.para.prev_para;
- if (prev_para->type == diParagraph) startPara = prev_para;
+ start_para = &from->pPara->member.para;
+ if (para_prev( start_para )) start_para = para_prev( start_para );
/* Find paragraph that contains end cursor */
- endPara = to->pPara->member.para.next_para;
+ end_para = para_next( &to->pPara->member.para );
- start.pPara = startPara;
- start.pRun = ME_FindItemFwd(startPara, diRun);
+ start.pPara = para_get_di( start_para );
+ start.pRun = run_get_di( para_first_run( start_para ) );
start.nOffset = 0;
- nChars = endPara->member.para.nCharOfs - startPara->member.para.nCharOfs;
+ num_chars = end_para->nCharOfs - start_para->nCharOfs;
- ME_UpdateLinkAttribute(editor, &start, nChars);
+ ME_UpdateLinkAttribute( editor, &start, num_chars );
}
static BOOL handle_enter(ME_TextEditor *editor)
--
2.23.0
1
0
Oct. 30, 2020
Signed-off-by: Huw Davies <huw(a)codeweavers.com>
---
dlls/riched20/editor.c | 30 ++++++++++++++----------------
1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index d1667dc9176..057d5a31ce6 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -1607,29 +1607,27 @@ static LRESULT ME_StreamIn(ME_TextEditor *editor, DWORD format, EDITSTREAM *stre
ME_InternalDeleteText(editor, selStart, to - from, FALSE);
/* Don't insert text at the end of the table row */
- if (!editor->bEmulateVersion10) { /* v4.1 */
- ME_DisplayItem *para = editor->pCursors->pPara;
- if (para->member.para.nFlags & MEPF_ROWEND)
- {
- para = para->member.para.next_para;
- editor->pCursors[0].pPara = para;
- editor->pCursors[0].pRun = ME_FindItemFwd(para, diRun);
- editor->pCursors[0].nOffset = 0;
- }
- if (para->member.para.nFlags & MEPF_ROWSTART)
+ if (!editor->bEmulateVersion10) /* v4.1 */
+ {
+ ME_Paragraph *para = &editor->pCursors->pPara->member.para;
+ if (para->nFlags & (MEPF_ROWSTART | MEPF_ROWEND))
{
- para = para->member.para.next_para;
- editor->pCursors[0].pPara = para;
- editor->pCursors[0].pRun = ME_FindItemFwd(para, diRun);
+ para = para_next( para );
+ editor->pCursors[0].pPara = para_get_di( para );
+ editor->pCursors[0].pRun = run_get_di( para_first_run( para ) );
editor->pCursors[0].nOffset = 0;
}
editor->pCursors[1] = editor->pCursors[0];
- } else { /* v1.0 - 3.0 */
+ }
+ else /* v1.0 - 3.0 */
+ {
if (editor->pCursors[0].pRun->member.run.nFlags & MERF_ENDPARA &&
- ME_IsInTable(editor->pCursors[0].pRun))
+ para_in_table( &editor->pCursors[0].pPara->member.para ))
return 0;
}
- } else {
+ }
+ else
+ {
style = editor->pBuffer->pDefaultStyle;
ME_AddRefStyle(style);
set_selection_cursors(editor, 0, 0);
--
2.23.0
1
0
Oct. 30, 2020
Signed-off-by: Jactry Zeng <jzeng(a)codeweavers.com>
---
v5: No changes.
v4:
- Match argument names in .idl to the original.
v3:
- Make creation of group manager safe.
v2:
- Add CRITICAL_SECTION for struct group_manager;
- Use DISPID_VALUE and DISPID_NEWENUM instead;
- Improve tests.
---
dlls/comsvcs/Makefile.in | 3 +-
dlls/comsvcs/comsvcs_private.h | 38 ++++++++
dlls/comsvcs/main.c | 28 +++---
dlls/comsvcs/property.c | 163 +++++++++++++++++++++++++++++++++
dlls/comsvcs/tests/Makefile.in | 3 +-
dlls/comsvcs/tests/property.c | 115 +++++++++++++++++++++++
include/comsvcs.idl | 65 +++++++++++++
7 files changed, 401 insertions(+), 14 deletions(-)
create mode 100644 dlls/comsvcs/comsvcs_private.h
create mode 100644 dlls/comsvcs/property.c
create mode 100644 dlls/comsvcs/tests/property.c
diff --git a/dlls/comsvcs/Makefile.in b/dlls/comsvcs/Makefile.in
index 7845400cb2e..b4a4244bce8 100644
--- a/dlls/comsvcs/Makefile.in
+++ b/dlls/comsvcs/Makefile.in
@@ -5,7 +5,8 @@ IMPORTS = ole32 uuid
EXTRADLLFLAGS = -mno-cygwin
C_SRCS = \
- main.c
+ main.c \
+ property.c
IDL_SRCS = \
comsvcs_classes.idl \
diff --git a/dlls/comsvcs/comsvcs_private.h b/dlls/comsvcs/comsvcs_private.h
new file mode 100644
index 00000000000..6d299d3a881
--- /dev/null
+++ b/dlls/comsvcs/comsvcs_private.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2020 Jactry Zeng for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef _COMSVCS_PRIVATE_H_
+#define _COMSVCS_PRIVATE_H_
+
+#define COBJMACROS
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "ole2.h"
+#include "rpcproxy.h"
+#include "comsvcs.h"
+#include "initguid.h"
+
+#include "wine/heap.h"
+#include "wine/debug.h"
+
+HRESULT WINAPI group_manager_create(IClassFactory *iface, IUnknown *outer, REFIID riid, void **out);
+
+#endif
diff --git a/dlls/comsvcs/main.c b/dlls/comsvcs/main.c
index 74704077ecb..b5ff952ad5b 100644
--- a/dlls/comsvcs/main.c
+++ b/dlls/comsvcs/main.c
@@ -18,18 +18,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#define COBJMACROS
-
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "ole2.h"
-#include "rpcproxy.h"
-#include "comsvcs.h"
-#include "wine/heap.h"
-#include "wine/debug.h"
-#include "initguid.h"
+#include "comsvcs_private.h"
#include "comsvcs_classes.h"
WINE_DEFAULT_DEBUG_CHANNEL(comsvcs);
@@ -1011,8 +1000,18 @@ static const IClassFactoryVtbl newmoniker_cf_vtbl =
comsvcscf_LockServer
};
+static const IClassFactoryVtbl group_manager_cf_vtbl =
+{
+ comsvcscf_QueryInterface,
+ comsvcscf_AddRef,
+ comsvcscf_Release,
+ group_manager_create,
+ comsvcscf_LockServer
+};
+
static IClassFactory DispenserManageFactory = { &comsvcscf_vtbl };
static IClassFactory NewMonikerFactory = { &newmoniker_cf_vtbl };
+static IClassFactory GroupManagerFactory = { &group_manager_cf_vtbl };
/******************************************************************
* DllGetClassObject
@@ -1029,6 +1028,11 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
TRACE("(CLSID_NewMoniker %s %p)\n", debugstr_guid(riid), ppv);
return IClassFactory_QueryInterface(&NewMonikerFactory, riid, ppv);
}
+ else if (IsEqualGUID(&CLSID_SharedPropertyGroupManager, rclsid))
+ {
+ TRACE("(CLSID_SharedPropertyGroupManager %s %p)\n", debugstr_guid(riid), ppv);
+ return IClassFactory_QueryInterface(&GroupManagerFactory, riid, ppv);
+ }
FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
return CLASS_E_CLASSNOTAVAILABLE;
diff --git a/dlls/comsvcs/property.c b/dlls/comsvcs/property.c
new file mode 100644
index 00000000000..3c9917c926a
--- /dev/null
+++ b/dlls/comsvcs/property.c
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2020 Jactry Zeng for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <comsvcs_private.h>
+
+WINE_DEFAULT_DEBUG_CHANNEL(comsvcs);
+
+struct group_manager
+{
+ ISharedPropertyGroupManager ISharedPropertyGroupManager_iface;
+ LONG refcount;
+};
+
+static struct group_manager *group_manager = NULL;
+
+static inline struct group_manager *impl_from_ISharedPropertyGroupManager(ISharedPropertyGroupManager *iface)
+{
+ return CONTAINING_RECORD(iface, struct group_manager, ISharedPropertyGroupManager_iface);
+}
+
+static HRESULT WINAPI group_manager_QueryInterface(ISharedPropertyGroupManager *iface, REFIID riid, void **out)
+{
+ struct group_manager *manager = impl_from_ISharedPropertyGroupManager(iface);
+
+ TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
+
+ if (IsEqualGUID(riid, &IID_IUnknown)
+ || IsEqualGUID(riid, &IID_IDispatch)
+ || IsEqualGUID(riid, &IID_ISharedPropertyGroupManager))
+ {
+ *out = &manager->ISharedPropertyGroupManager_iface;
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
+ }
+
+ WARN("%s not implemented.\n", debugstr_guid(riid));
+ *out = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI group_manager_AddRef(ISharedPropertyGroupManager *iface)
+{
+ struct group_manager *manager = impl_from_ISharedPropertyGroupManager(iface);
+ ULONG refcount = InterlockedIncrement(&manager->refcount);
+
+ TRACE("%p increasing refcount to %u.\n", iface, refcount);
+
+ return refcount;
+}
+
+static ULONG WINAPI group_manager_Release(ISharedPropertyGroupManager *iface)
+{
+ struct group_manager *manager = impl_from_ISharedPropertyGroupManager(iface);
+ ULONG refcount = InterlockedDecrement(&manager->refcount);
+
+ TRACE("%p decreasing refcount to %u.\n", iface, refcount);
+
+ return refcount;
+}
+
+static HRESULT WINAPI group_manager_GetTypeInfoCount(ISharedPropertyGroupManager *iface, UINT *info)
+{
+ FIXME("iface %p, info %p: stub.\n", iface, info);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI group_manager_GetTypeInfo(ISharedPropertyGroupManager *iface, UINT index, LCID lcid, ITypeInfo **info)
+{
+ FIXME("iface %p, index %u, lcid %u, info %p: stub.\n", iface, index, lcid, info);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI group_manager_GetIDsOfNames(ISharedPropertyGroupManager *iface, REFIID riid, LPOLESTR *names, UINT count,
+ LCID lcid, DISPID *dispid)
+{
+ FIXME("iface %p, riid %s, names %p, count %u, lcid %u, dispid %p: stub.\n",
+ iface, debugstr_guid(riid), names, count, lcid, dispid);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI group_manager_Invoke(ISharedPropertyGroupManager *iface, DISPID member, REFIID riid, LCID lcid,
+ WORD flags, DISPPARAMS *params, VARIANT *result, EXCEPINFO *except, UINT *argerr)
+{
+ FIXME("iface %p, member %u, riid %s, lcid %u, flags %x, params %p, result %p, except %p, argerr %p: stub.\n",
+ iface, member, debugstr_guid(riid), lcid, flags, params, result, except, argerr);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI group_manager_CreatePropertyGroup(ISharedPropertyGroupManager *iface, BSTR name, LONG *isolation,
+ LONG *release, VARIANT_BOOL *exists, ISharedPropertyGroup **group)
+{
+ FIXME("iface %p, name %s, isolation %p, release %p, exists %p, group %p: stub.\n",
+ iface, debugstr_w(name), isolation, release, exists, group);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI group_manager_get_Group(ISharedPropertyGroupManager *iface, BSTR name, ISharedPropertyGroup **group)
+{
+ FIXME("iface %p, name %s, group %p: stub.\n", iface, debugstr_w(name), group);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI group_manager_get__NewEnum(ISharedPropertyGroupManager *iface, IUnknown **retval)
+{
+ FIXME("iface %p, retval %p: stub.\n", iface, retval);
+ return E_NOTIMPL;
+}
+
+static const ISharedPropertyGroupManagerVtbl group_manager_vtbl =
+{
+ group_manager_QueryInterface,
+ group_manager_AddRef,
+ group_manager_Release,
+ group_manager_GetTypeInfoCount,
+ group_manager_GetTypeInfo,
+ group_manager_GetIDsOfNames,
+ group_manager_Invoke,
+ group_manager_CreatePropertyGroup,
+ group_manager_get_Group,
+ group_manager_get__NewEnum
+};
+
+HRESULT WINAPI group_manager_create(IClassFactory *iface, IUnknown *outer, REFIID riid, void **out)
+{
+ struct group_manager *manager;
+
+ if (outer)
+ return CLASS_E_NOAGGREGATION;
+
+ if (!group_manager)
+ {
+ manager = heap_alloc(sizeof(*manager));
+ if (!manager)
+ {
+ *out = NULL;
+ return E_OUTOFMEMORY;
+ }
+ manager->ISharedPropertyGroupManager_iface.lpVtbl = &group_manager_vtbl;
+ manager->refcount = 1;
+
+ if (InterlockedCompareExchangePointer((void **)&group_manager, manager, NULL))
+ {
+ heap_free(manager);
+ }
+ }
+ return ISharedPropertyGroupManager_QueryInterface(&group_manager->ISharedPropertyGroupManager_iface, riid, out);
+}
diff --git a/dlls/comsvcs/tests/Makefile.in b/dlls/comsvcs/tests/Makefile.in
index 86da9fda662..1d9146ba5b6 100644
--- a/dlls/comsvcs/tests/Makefile.in
+++ b/dlls/comsvcs/tests/Makefile.in
@@ -2,4 +2,5 @@ TESTDLL = comsvcs.dll
IMPORTS = uuid oleaut32 ole32
C_SRCS = \
- comsvcs.c
+ comsvcs.c \
+ property.c
diff --git a/dlls/comsvcs/tests/property.c b/dlls/comsvcs/tests/property.c
new file mode 100644
index 00000000000..adad7bd5391
--- /dev/null
+++ b/dlls/comsvcs/tests/property.c
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2020 Jactry Zeng for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "comsvcs.h"
+
+#include "wine/test.h"
+
+static ULONG get_refcount(void *iface)
+{
+ IUnknown *unknown = iface;
+ IUnknown_AddRef(unknown);
+ return IUnknown_Release(unknown);
+}
+
+static HRESULT WINAPI outer_QueryInterface(IUnknown *iface, REFIID iid, void **out)
+{
+ ok(0, "Unexpected call.\n");
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI outer_AddRef(IUnknown *iface)
+{
+ ok(0, "Unexpected call.\n");
+ return 1;
+}
+
+static ULONG WINAPI outer_Release(IUnknown *iface)
+{
+ ok(0, "Unexpected call.\n");
+ return 0;
+}
+
+static const IUnknownVtbl outer_vtbl =
+{
+ outer_QueryInterface,
+ outer_AddRef,
+ outer_Release,
+};
+
+static IUnknown test_outer = {&outer_vtbl};
+
+static void test_interfaces(void)
+{
+ ISharedPropertyGroupManager *manager, *manager1;
+ ULONG refcount, expected_refcount;
+ IDispatch *dispatch;
+ IUnknown *unk;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_SharedPropertyGroupManager, &test_outer, CLSCTX_INPROC_SERVER,
+ &IID_ISharedPropertyGroupManager, (void **)&manager);
+ ok(hr == CLASS_E_NOAGGREGATION, "Got hr %#x.\n", hr);
+
+ hr = CoCreateInstance(&CLSID_SharedPropertyGroupManager, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IUnknown, (void **)&unk);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ expected_refcount = get_refcount(unk) + 1;
+ hr = IUnknown_QueryInterface(unk, &IID_ISharedPropertyGroupManager, (void **)&manager);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ refcount = get_refcount(unk);
+ ok(refcount == expected_refcount, "Got refcount: %u, expected %u.\n", refcount, expected_refcount);
+
+ expected_refcount = get_refcount(manager) + 1;
+ hr = CoCreateInstance(&CLSID_SharedPropertyGroupManager, NULL, CLSCTX_INPROC_SERVER,
+ &IID_ISharedPropertyGroupManager, (void **)&manager1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(manager1 == manager, "Got wrong pointer: %p.\n", manager1);
+ refcount = get_refcount(manager1);
+ ok(refcount == expected_refcount, "Got refcount: %u, expected %u.\n", refcount, expected_refcount);
+ refcount = get_refcount(manager);
+ ok(refcount == expected_refcount, "Got refcount: %u, expected %u.\n", refcount, expected_refcount);
+ ISharedPropertyGroupManager_Release(manager1);
+
+ hr = IUnknown_QueryInterface(unk, &IID_IDispatch, (void **)&dispatch);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ refcount = get_refcount(dispatch);
+ ok(refcount == expected_refcount, "Got refcount: %u, expected %u.\n", refcount, expected_refcount);
+ refcount = get_refcount(manager);
+ ok(refcount == expected_refcount, "Got refcount: %u, expected %u.\n", refcount, expected_refcount);
+
+ IDispatch_Release(dispatch);
+ IUnknown_Release(unk);
+ ISharedPropertyGroupManager_Release(manager);
+}
+
+START_TEST(property)
+{
+ CoInitialize(NULL);
+
+ test_interfaces();
+
+ CoUninitialize();
+}
diff --git a/include/comsvcs.idl b/include/comsvcs.idl
index d64af1f5a85..ac50141174d 100644
--- a/include/comsvcs.idl
+++ b/include/comsvcs.idl
@@ -37,6 +37,8 @@ typedef DWORD_PTR TRANSID;
]
library COMSVCSLib
{
+ importlib("stdole2.tlb");
+
[
object,
hidden,
@@ -96,4 +98,67 @@ library COMSVCSLib
{
[default] interface IDispenserManager;
};
+
+ [
+ object,
+ hidden,
+ local,
+ uuid(2a005c01-a5de-11cf-9e66-00aa00a3f464),
+ pointer_default(unique)
+ ]
+ interface ISharedProperty : IDispatch
+ {
+ [id(DISPID_VALUE), propget]
+ HRESULT Value([out, retval] VARIANT *pVal);
+ [id(DISPID_VALUE), propput]
+ HRESULT Value([in] VARIANT val);
+ }
+
+ [
+ object,
+ hidden,
+ local,
+ uuid(2a005c07-a5de-11cf-9e66-00aa00a3f464),
+ pointer_default(unique)
+ ]
+ interface ISharedPropertyGroup : IDispatch
+ {
+ [id(0x00000001)]
+ HRESULT CreatePropertyByPosition([in] int Index, [out] VARIANT_BOOL *fExists, [out, retval] ISharedProperty **ppProp);
+ [id(0x00000002), propget]
+ HRESULT PropertyByPosition([in] int Index, [out, retval] ISharedProperty **ppProperty);
+ [id(0x00000003)]
+ HRESULT CreateProperty([in] BSTR Name, [out] VARIANT_BOOL *fExists, [out, retval] ISharedProperty **ppProp);
+ [id(0x00000004), propget]
+ HRESULT Property([in] BSTR Name, [out, retval] ISharedProperty **ppProperty);
+ }
+
+ [
+ object,
+ hidden,
+ local,
+ uuid(2a005c0d-a5de-11cf-9e66-00aa00a3f464),
+ pointer_default(unique)
+ ]
+ interface ISharedPropertyGroupManager : IDispatch
+ {
+ [id(0x00000001)]
+ HRESULT CreatePropertyGroup([in] BSTR Name, [in, out] LONG *dwIsoMode, [in, out] LONG *dwRelMode,
+ [out] VARIANT_BOOL *fExists, [out, retval] ISharedPropertyGroup **ppGroup);
+ [id(0x00000002), propget]
+ HRESULT Group([in] BSTR Name, [out, retval] ISharedPropertyGroup **ppGroup);
+ [id(DISPID_NEWENUM), propget]
+ HRESULT _NewEnum([out, retval] IUnknown **retval);
+ }
+
+ [
+ uuid(2a005c11-a5de-11cf-9e66-00aa00a3f464),
+ progid("MTxSpm.SharedPropertyGroupManager.1"),
+ vi_progid("MTxSpm.SharedPropertyGroupManager"),
+ threading(both)
+ ]
+ coclass SharedPropertyGroupManager
+ {
+ [default] interface ISharedPropertyGroupManager;
+ }
}
--
2.28.0
2
9
[PATCH 1/2] winemac.drv: Send HTMENU instead of HTCAPTION to query window activation.
by Zhiyi Zhang Oct. 30, 2020
by Zhiyi Zhang Oct. 30, 2020
Oct. 30, 2020
Equivalent of cfcc280905b7804efde8f42bcd6bddbe5ebd8cad for winex11.drv.
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/winemac.drv/window.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/winemac.drv/window.c b/dlls/winemac.drv/window.c
index 066eb553f76..e7f5327fcdc 100644
--- a/dlls/winemac.drv/window.c
+++ b/dlls/winemac.drv/window.c
@@ -2348,11 +2348,11 @@ void macdrv_window_got_focus(HWND hwnd, const macdrv_event *event)
if (can_activate_window(hwnd) && !(style & WS_MINIMIZE))
{
- /* simulate a mouse click on the caption to find out
+ /* simulate a mouse click on the menu to find out
* whether the window wants to be activated */
LRESULT ma = SendMessageW(hwnd, WM_MOUSEACTIVATE,
(WPARAM)GetAncestor(hwnd, GA_ROOT),
- MAKELONG(HTCAPTION,WM_LBUTTONDOWN));
+ MAKELONG(HTMENU, WM_LBUTTONDOWN));
if (ma != MA_NOACTIVATEANDEAT && ma != MA_NOACTIVATE)
{
TRACE("setting foreground window to %p\n", hwnd);
--
2.27.0
2
1
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
---
dlls/winex11.drv/event.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 07f7a1ad502..d21d2a7fb1b 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -702,7 +702,7 @@ static void handle_wm_protocols( HWND hwnd, XClientMessageEvent *event )
if (can_activate_window(hwnd))
{
- /* simulate a mouse click on the caption to find out
+ /* simulate a mouse click on the menu to find out
* whether the window wants to be activated */
LRESULT ma = SendMessageW( hwnd, WM_MOUSEACTIVATE,
(WPARAM)GetAncestor( hwnd, GA_ROOT ),
--
2.27.0
1
0
[PATCH 2/3] msado15: Support ADORecordsetConstruction in _Recordset
by Alistair Leslie-Hughes Oct. 30, 2020
by Alistair Leslie-Hughes Oct. 30, 2020
Oct. 30, 2020
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
dlls/msado15/recordset.c | 123 +++++++++++++++++++++++++++++++++++
dlls/msado15/tests/msado15.c | 5 ++
2 files changed, 128 insertions(+)
diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
index e3dd83a4309..5ad593dce5c 100644
--- a/dlls/msado15/recordset.c
+++ b/dlls/msado15/recordset.c
@@ -35,6 +35,7 @@ struct fields;
struct recordset
{
_Recordset Recordset_iface;
+ ADORecordsetConstruction ADORecordsetConstruction_iface;
ISupportErrorInfo ISupportErrorInfo_iface;
LONG refs;
LONG state;
@@ -739,6 +740,11 @@ static inline struct recordset *impl_from_Recordset( _Recordset *iface )
return CONTAINING_RECORD( iface, struct recordset, Recordset_iface );
}
+static inline struct recordset *impl_from_ADORecordsetConstruction( ADORecordsetConstruction *iface )
+{
+ return CONTAINING_RECORD( iface, struct recordset, ADORecordsetConstruction_iface );
+}
+
static ULONG WINAPI recordset_AddRef( _Recordset *iface )
{
struct recordset *recordset = impl_from_Recordset( iface );
@@ -798,6 +804,10 @@ static HRESULT WINAPI recordset_QueryInterface( _Recordset *iface, REFIID riid,
{
*obj = &recordset->ISupportErrorInfo_iface;
}
+ else if (IsEqualGUID( riid, &IID_ADORecordsetConstruction ))
+ {
+ *obj = &recordset->ADORecordsetConstruction_iface;
+ }
else if (IsEqualGUID( riid, &IID_IRunnableObject ))
{
TRACE("IID_IRunnableObject not supported returning NULL\n");
@@ -1545,6 +1555,118 @@ static const ISupportErrorInfoVtbl recordset_supporterrorinfo_vtbl =
recordset_supporterrorinfo_InterfaceSupportsErrorInfo
};
+static HRESULT WINAPI rsconstruction_QueryInterface(ADORecordsetConstruction *iface,
+ REFIID riid, void **obj)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ return _Recordset_QueryInterface( &recordset->Recordset_iface, riid, obj );
+}
+
+static ULONG WINAPI rsconstruction_AddRef(ADORecordsetConstruction *iface)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ return _Recordset_AddRef( &recordset->Recordset_iface );
+}
+
+static ULONG WINAPI rsconstruction_Release(ADORecordsetConstruction *iface)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ return _Recordset_Release( &recordset->Recordset_iface );
+}
+
+static HRESULT WINAPI rsconstruction_GetTypeInfoCount(ADORecordsetConstruction *iface, UINT *pctinfo)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ TRACE("%p, %p\n", recordset, pctinfo);
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI rsconstruction_GetTypeInfo(ADORecordsetConstruction *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p %u %u %p\n", recordset, iTInfo, lcid, ppTInfo);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_GetIDsOfNames(ADORecordsetConstruction *iface, REFIID riid,
+ LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p %s %p %u %u %p\n", recordset, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_Invoke(ADORecordsetConstruction *iface, DISPID dispIdMember,
+ REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p %d %s %d %d %p %p %p %p\n", recordset, dispIdMember, debugstr_guid(riid),
+ lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_get_Rowset(ADORecordsetConstruction *iface, IUnknown **row_set)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_set);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_put_Rowset(ADORecordsetConstruction *iface, IUnknown *row_set)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_set);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_get_Chapter(ADORecordsetConstruction *iface, LONG *chapter)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, chapter);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_put_Chapter(ADORecordsetConstruction *iface, LONG chapter)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %d\n", recordset, chapter);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_get_RowPosition(ADORecordsetConstruction *iface, IUnknown **row_pos)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_pos);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI rsconstruction_put_RowPosition(ADORecordsetConstruction *iface, IUnknown *row_pos)
+{
+ struct recordset *recordset = impl_from_ADORecordsetConstruction( iface );
+ FIXME("%p, %p\n", recordset, row_pos);
+ return E_NOTIMPL;
+}
+
+static const ADORecordsetConstructionVtbl rsconstruction_vtbl =
+{
+ rsconstruction_QueryInterface,
+ rsconstruction_AddRef,
+ rsconstruction_Release,
+ rsconstruction_GetTypeInfoCount,
+ rsconstruction_GetTypeInfo,
+ rsconstruction_GetIDsOfNames,
+ rsconstruction_Invoke,
+ rsconstruction_get_Rowset,
+ rsconstruction_put_Rowset,
+ rsconstruction_get_Chapter,
+ rsconstruction_put_Chapter,
+ rsconstruction_get_RowPosition,
+ rsconstruction_put_RowPosition
+};
+
HRESULT Recordset_create( void **obj )
{
struct recordset *recordset;
@@ -1552,6 +1674,7 @@ HRESULT Recordset_create( void **obj )
if (!(recordset = heap_alloc_zero( sizeof(*recordset) ))) return E_OUTOFMEMORY;
recordset->Recordset_iface.lpVtbl = &recordset_vtbl;
recordset->ISupportErrorInfo_iface.lpVtbl = &recordset_supporterrorinfo_vtbl;
+ recordset->ADORecordsetConstruction_iface.lpVtbl = &rsconstruction_vtbl;
recordset->refs = 1;
recordset->index = -1;
recordset->cursor_location = adUseServer;
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index e95df49c2c2..723c452fd88 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -61,6 +61,7 @@ static LONG get_refs_recordset( _Recordset *recordset )
static void test_Recordset(void)
{
_Recordset *recordset;
+ ADORecordsetConstruction *construct;
IRunnableObject *runtime;
ISupportErrorInfo *errorinfo;
Fields *fields, *fields2;
@@ -79,6 +80,10 @@ static void test_Recordset(void)
ok(hr == E_NOINTERFACE, "Unexpected IRunnableObject interface\n");
ok(runtime == NULL, "expected NULL\n");
+ hr = _Recordset_QueryInterface(recordset, &IID_ADORecordsetConstruction, (void**)&construct);
+ ok( hr == S_OK, "got %08x\n", hr );
+ ADORecordsetConstruction_Release(construct);
+
/* _Recordset object supports ISupportErrorInfo */
errorinfo = NULL;
hr = _Recordset_QueryInterface( recordset, &IID_ISupportErrorInfo, (void **)&errorinfo );
--
2.28.0
1
0
Oct. 30, 2020
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com>
---
include/dbs.idl | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/include/dbs.idl b/include/dbs.idl
index 19f92b3c05f..cbdb89d23b2 100644
--- a/include/dbs.idl
+++ b/include/dbs.idl
@@ -79,6 +79,22 @@ enum DBPROPOPTIONENUM {
typedef DWORD DBPROPSTATUS;
+enum DBPROPSTATUSENUM {
+ DBPROPSTATUS_OK = 0,
+ DBPROPSTATUS_NOTSUPPORTED = 1,
+ DBPROPSTATUS_BADVALUE = 2,
+ DBPROPSTATUS_BADOPTION = 3,
+ DBPROPSTATUS_BADCOLUMN = 4,
+ DBPROPSTATUS_NOTALLSETTABLE = 5,
+ DBPROPSTATUS_NOTSETTABLE = 6,
+ DBPROPSTATUS_NOTSET = 7,
+ DBPROPSTATUS_CONFLICTING = 8
+};
+
+enum DBPROPSTATUSENUM21 {
+ DBPROPSTATUS_NOTAVAILABLE = 9
+};
+
typedef struct tagDBPROP {
DBPROPID dwPropertyID;
DBPROPOPTIONS dwOptions;
--
2.28.0
1
0
Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com>
---
dlls/tzres/tzres.rc | 2 ++
loader/wine.inf.in | 10 ++++++++++
2 files changed, 12 insertions(+)
diff --git a/dlls/tzres/tzres.rc b/dlls/tzres/tzres.rc
index 5315a1dff01..596875fe56a 100644
--- a/dlls/tzres/tzres.rc
+++ b/dlls/tzres/tzres.rc
@@ -194,6 +194,8 @@ STRINGTABLE
49425 "SA Pacific Daylight Time"
57120 "SA Western Standard Time"
57121 "SA Western Daylight Time"
+ 5584 "Saint Pierre Standard Time"
+ 5585 "Saint Pierre Daylight Time"
14592 "Samoa Standard Time"
14593 "Samoa Daylight Time"
53728 "SE Asia Standard Time"
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 3f37b1ca137..31e9f2a30b3 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -3504,6 +3504,16 @@ HKLM,%CurrentVersionNT%\Time Zones\SA Western Standard Time,"MUI_Dlt",,"@tzres.d
HKLM,%CurrentVersionNT%\Time Zones\SA Western Standard Time,"MUI_Std",,"@tzres.dll,-57120"
HKLM,%CurrentVersionNT%\Time Zones\SA Western Standard Time,"Std",,"SA Western Standard Time"
HKLM,%CurrentVersionNT%\Time Zones\SA Western Standard Time,"TZI",1,f0,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time,"Display",,"America/Miquelon"
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time,"Dlt",,"Saint Pierre Daylight Time"
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time,"MUI_Dlt",,"@tzres.dll,-5585"
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time,"MUI_Std",,"@tzres.dll,-5584"
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time,"Std",,"Saint Pierre Standard Time"
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time,"TZI",1,b4,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,0b,00,00,00,01,00,02,00,00,00,00,00,00,00,00,00,03,00,00,00,02,00,02,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time\Dynamic DST,"2006",1,b4,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,0a,00,00,00,05,00,02,00,00,00,00,00,00,00,00,00,04,00,00,00,01,00,02,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time\Dynamic DST,"2007",1,b4,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,0b,00,00,00,01,00,02,00,00,00,00,00,00,00,00,00,03,00,00,00,02,00,02,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time\Dynamic DST,"FirstEntry",0x10001,"2006"
+HKLM,%CurrentVersionNT%\Time Zones\Saint Pierre Standard Time\Dynamic DST,"LastEntry",0x10001,"2007"
HKLM,%CurrentVersionNT%\Time Zones\Samoa Standard Time,"Display",,"Pacific/Apia"
HKLM,%CurrentVersionNT%\Time Zones\Samoa Standard Time,"Dlt",,"Samoa Daylight Time"
HKLM,%CurrentVersionNT%\Time Zones\Samoa Standard Time,"MUI_Dlt",,"@tzres.dll,-14593"
--
2.17.1
1
0
Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com>
---
dlls/tzres/tzres.rc | 2 ++
loader/wine.inf.in | 21 +++++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/dlls/tzres/tzres.rc b/dlls/tzres/tzres.rc
index 5315a1dff01..7bf0398cfd8 100644
--- a/dlls/tzres/tzres.rc
+++ b/dlls/tzres/tzres.rc
@@ -142,6 +142,8 @@ STRINGTABLE
16769 "Line Islands Daylight Time"
8832 "Magadan Standard Time"
8833 "Magadan Daylight Time"
+ 13120 "Magallanes Standard Time"
+ 13121 "Magallanes Daylight Time"
20736 "Marquesas Standard Time"
20737 "Marquesas Daylight Time"
60896 "Mauritius Standard Time"
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index 3f37b1ca137..3b80642d2bc 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -3320,6 +3320,27 @@ HKLM,%CurrentVersionNT%\Time Zones\Magadan Standard Time,"MUI_Dlt",,"@tzres.dll,
HKLM,%CurrentVersionNT%\Time Zones\Magadan Standard Time,"MUI_Std",,"@tzres.dll,-8832"
HKLM,%CurrentVersionNT%\Time Zones\Magadan Standard Time,"Std",,"Magadan Standard Time"
HKLM,%CurrentVersionNT%\Time Zones\Magadan Standard Time,"TZI",1,a8,fd,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time,"Display",,"America/Punta_Arenas"
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time,"Dlt",,"Magallanes Daylight Time"
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time,"MUI_Dlt",,"@tzres.dll,-13121"
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time,"MUI_Std",,"@tzres.dll,-13120"
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time,"Std",,"Magallanes Standard Time"
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time,"TZI",1,b4,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2005",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,02,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2006",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,03,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2007",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,02,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2008",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,05,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,02,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2009",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,02,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2010",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,04,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,02,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2011",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,05,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,08,00,00,00,03,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2012",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,04,00,00,00,05,00,00,00,00,00,00,00,00,00,00,00,09,00,00,00,01,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2013",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,04,00,00,00,05,00,00,00,00,00,00,00,00,00,00,00,09,00,00,00,02,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2014",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,04,00,00,00,05,00,00,00,00,00,00,00,00,00,00,00,09,00,00,00,01,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2015",1,b4,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2016",1,f0,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,05,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,08,00,00,00,02,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"2017",1,b4,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"FirstEntry",0x10001,"2005"
+HKLM,%CurrentVersionNT%\Time Zones\Magallanes Standard Time\Dynamic DST,"LastEntry",0x10001,"2017"
HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"Display",,"Pacific/Marquesas"
HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"Dlt",,"Marquesas Daylight Time"
HKLM,%CurrentVersionNT%\Time Zones\Marquesas Standard Time,"MUI_Dlt",,"@tzres.dll,-20737"
--
2.17.1
1
0
[PATCH v2 1/6] oleaut32/tests: Cover Get*CustData in test_dump_typelib.
by Kevin Puetz Oct. 30, 2020
by Kevin Puetz Oct. 30, 2020
Oct. 30, 2020
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
v2 fixes an "unknown number of optional attrs" warning from widl.
I had overlooked a case 0:, where there are no extra_attrs, so the
new code in add_var_desc does nothing (but shouldn't warn).
Another catch for our favorite paranoid android... or at least the logs
he emails out. Sorry I overlooked the warning in my own build.
---
The oleaut32 bugs fixed in 5/6 and 6/6 motivated this series:
They were discovered while processing a midl-generated typelib
with a binding generator that uses ITypeLib.
As no wine .tlb files currently have custdata, this first patch just adds
the test infrastructure to explicitly verify that, (and with it,
the noisy diffs in the autogenerated part of tests/typelib.c).
The rest of this series adds then widl support for [custom(...)],
and then data in test_tlb.idl which (using that widl support)
produces a test_tlb.tlb that exercises the bug fixes.
I have also verified (manually) that these conformance tests
pass when reading a midl-generated test_tlb.tlb.
Having widl support [custom(...)] also addresses one of the main
blockers to building our projects' typelibs with widl instead of midl,
though it isn't yet the last one...
---
dlls/oleaut32/tests/typelib.c | 275 +++++++++++++++++++++++++++++++++-
1 file changed, 267 insertions(+), 8 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 47a84a769e1..3c7a3bd147d 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -4315,6 +4315,12 @@ static const char *dump_variant_info(const VARIANT *v)
return buf;
}
+static const char *dump_custdata_info(LPCUSTDATAITEM item) {
+ static char buf[256];
+ sprintf(buf, "{ \"%s\", %s }", wine_dbgstr_guid(&item->guid), dump_variant_info(&item->varValue));
+ return buf;
+}
+
static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc)
{
int href_type = -1;
@@ -4342,10 +4348,12 @@ static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc)
static void test_dump_typelib(const WCHAR *name)
{
ITypeInfo *info;
+ ITypeInfo2 *info2;
ITypeLib *lib;
int count;
int i;
HREFTYPE hRefType = 0;
+ CUSTDATA cust_data;
OLE_CHECK(LoadTypeLib(name, &lib));
@@ -4357,7 +4365,7 @@ static void test_dump_typelib(const WCHAR *name)
TYPEATTR *attr;
BSTR name;
DWORD help_ctx;
- int f = 0, v = 0;
+ int f = 0, v = 0, c = 0;
OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, &help_ctx, NULL));
printf("{\n"
@@ -4371,7 +4379,10 @@ static void test_dump_typelib(const WCHAR *name)
ITypeInfo_Release(info);
info = refInfo;
}
+ OLE_CHECK(ITypeInfo_QueryInterface(info, &IID_ITypeInfo2, (void**)&info2));
+
OLE_CHECK(ITypeInfo_GetTypeAttr(info, &attr));
+ OLE_CHECK(ITypeInfo2_GetAllCustData(info2,&cust_data));
printf(" \"%s\",\n", wine_dbgstr_guid(&attr->guid));
@@ -4382,6 +4393,13 @@ static void test_dump_typelib(const WCHAR *name)
help_ctx, MAKELONG(attr->wMinorVerNum, attr->wMajorVerNum),
attr->cbSizeVft/sizeof(void*), attr->cFuncs, attr->cVars);
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" { /* funcs */%s", attr->cFuncs ? "\n" : " },\n");
while (1)
{
@@ -4392,6 +4410,7 @@ static void test_dump_typelib(const WCHAR *name)
if (FAILED(ITypeInfo_GetFuncDesc(info, f, &desc)))
break;
+ OLE_CHECK(ITypeInfo2_GetAllFuncCustData(info2,f,&cust_data));
printf(" {\n"
" /*id*/ 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ %s,\n",
desc->memid, map_value(desc->funckind, funckind_map), map_value(desc->invkind, invkind_map),
@@ -4400,12 +4419,30 @@ static void test_dump_typelib(const WCHAR *name)
desc->cParams, desc->cParamsOpt, desc->oVft/sizeof(void*), desc->cScodes, dump_func_flags(desc->wFuncFlags));
printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescFunc.tdesc.vt, vt_map),
map_value(get_href_type(info, &desc->elemdescFunc.tdesc), tkind_map), dump_param_flags(U(desc->elemdescFunc).paramdesc.wParamFlags));
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" { /* params */\n");
for (p = 0; p < desc->cParams; p++)
{
ELEMDESC e = desc->lprgelemdescParam[p];
- printf(" {%s, %s, %s},\n", map_value(e.tdesc.vt, vt_map),
+ OLE_CHECK(ITypeInfo2_GetAllParamCustData(info2,f,p,&cust_data));
+ printf(" {%s, %s, %s", map_value(e.tdesc.vt, vt_map),
map_value(get_href_type(info, &e.tdesc), tkind_map), dump_param_flags(U(e).paramdesc.wParamFlags));
+ if (cust_data.cCustData) {
+ printf(", /*#custdata*/ %d, {\n", cust_data.cCustData);
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ printf(" } },\n");
+ } else {
+ printf("},\n");
+ }
+ ClearCustData(&cust_data);
}
printf(" {-1, 0, 0}\n");
printf(" },\n");
@@ -4432,6 +4469,7 @@ static void test_dump_typelib(const WCHAR *name)
UINT cNames;
if (FAILED(ITypeInfo_GetVarDesc(info, v, &desc)))
break;
+ OLE_CHECK(ITypeInfo2_GetAllVarCustData(info2,v,&cust_data));
OLE_CHECK(ITypeInfo_GetNames(info, desc->memid, &varname, 1, &cNames));
if(cNames!=1) { printf("GetNames failed - VARDESC should have one name, got %d\n", cNames); return; }
printf(" {\n"
@@ -4445,6 +4483,14 @@ static void test_dump_typelib(const WCHAR *name)
} else {
printf(" { /* DUMMYUNIONNAME unused*/ },\n");
}
+
+ printf(" /*#custdata*/ %d, %s\n", cust_data.cCustData, cust_data.cCustData ? "{" : "{},");
+ for (c = 0; c < cust_data.cCustData; ++c) {
+ printf(" %s,\n", dump_custdata_info(&cust_data.prgCustData[c]));
+ }
+ if (cust_data.cCustData) printf(" },\n");
+ ClearCustData(&cust_data);
+
printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescVar.tdesc.vt, vt_map),
map_value(get_href_type(info, &desc->elemdescVar.tdesc), tkind_map), dump_param_flags(U(desc->elemdescVar).paramdesc.wParamFlags));
printf(" },\n");
@@ -4467,6 +4513,7 @@ static void test_dump_typelib(const WCHAR *name)
}
ITypeInfo_ReleaseTypeAttr(info, attr);
+ ITypeInfo2_Release(info2);
ITypeInfo_Release(info);
SysFreeString(name);
}
@@ -4485,11 +4532,18 @@ typedef struct _variant_info {
};
} variant_info;
+typedef struct _custdata_info {
+ LPCSTR uuid;
+ variant_info value;
+} custdata_info;
+
typedef struct _element_info
{
VARTYPE vt;
TYPEKIND type;
USHORT wParamFlags;
+ DWORD cCustData;
+ custdata_info custdata[5];
} element_info;
typedef struct _function_info
@@ -4504,6 +4558,8 @@ typedef struct _function_info
short cScodes;
WORD wFuncFlags;
element_info ret_type;
+ DWORD cCustData;
+ custdata_info custdata[5];
element_info params[15];
LPCSTR names[15];
} function_info;
@@ -4518,6 +4574,8 @@ typedef struct _var_info
ULONG oInst; /* VAR_PERINSTANCE */
variant_info varValue; /* VAR_CONST */
} DUMMYUNIONNAME;
+ DWORD cCustData;
+ custdata_info custdata[5];
element_info elemdescVar;
} var_info;
@@ -4534,6 +4592,8 @@ typedef struct _type_info
USHORT cbSizeVft;
USHORT cFuncs;
USHORT cVars;
+ DWORD cCustData;
+ custdata_info custdata[5];
function_info funcs[20];
var_info vars[20];
} type_info;
@@ -4546,11 +4606,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7a0001}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct g), /*size*/ sizeof(struct g),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "g1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4560,11 +4622,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7a0002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(test_iface*), /*size*/ sizeof(test_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -4583,11 +4647,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aa001}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(parent_iface*), /*size*/ sizeof(parent_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -4606,11 +4672,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aa002}",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(child_iface*), /*size*/ sizeof(child_iface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 5, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4627,11 +4695,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753903}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _n), /*size*/ sizeof(struct _n),
/*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "n1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4641,6 +4711,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753902}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(n), /*size*/ sizeof(n),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4649,6 +4720,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(nn), /*size*/ sizeof(nn),
/*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4657,11 +4729,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753906}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct _m), /*size*/ sizeof(struct _m),
/*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "m1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4671,6 +4745,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753905}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(m), /*size*/ sizeof(m),
/*helpctx*/ 0x0000, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4679,6 +4754,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(mm), /*size*/ sizeof(mm),
/*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4687,11 +4763,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(IDualIface*), /*size*/ sizeof(IDualIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 8, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -4708,6 +4786,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4720,6 +4799,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4732,6 +4812,7 @@ static const type_info info[] = {
/*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT},
{-1, 0, 0}
@@ -4746,6 +4827,7 @@ static const type_info info[] = {
/*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_UINT, -1, PARAMFLAG_FIN},
{VT_UI4, -1, PARAMFLAG_FIN},
@@ -4764,6 +4846,7 @@ static const type_info info[] = {
/*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -4786,6 +4869,7 @@ static const type_info info[] = {
/*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_I4, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -4814,6 +4898,7 @@ static const type_info info[] = {
/*id*/ 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4830,11 +4915,13 @@ static const type_info info[] = {
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FOLEAUTOMATION|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(IDualIface*), /*size*/ sizeof(IDualIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4851,11 +4938,13 @@ static const type_info info[] = {
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ISimpleIface*), /*size*/ sizeof(ISimpleIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -4872,26 +4961,31 @@ static const type_info info[] = {
"{4029f190-ca4a-4611-aeb9-673983cb96dd}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct), /*size*/ sizeof(struct test_struct),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 8 },
+ /*#custdata*/ 0, {},
{VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 12 },
+ /*#custdata*/ 0, {},
{VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4901,26 +4995,31 @@ static const type_info info[] = {
"{4029f190-ca4a-4611-aeb9-673983cb96de}",
/*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct test_struct2), /*size*/ sizeof(struct test_struct2),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 4,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "hr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 4 },
+ /*#custdata*/ 0, {},
{VT_BOOL, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000002, /*name*/ "disp", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 8 },
+ /*#custdata*/ 0, {},
{VT_DISPATCH, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000003, /*name*/ "bstr", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 12 },
+ /*#custdata*/ 0, {},
{VT_BSTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4930,6 +5029,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396a}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED, /*align*/ TYPE_ALIGNMENT(t_INT), /*size*/ sizeof(t_INT),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4938,6 +5038,7 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(a), /*size*/ sizeof(a),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -4946,16 +5047,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "a1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "a2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4965,16 +5069,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "aa1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "aa2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -4984,16 +5091,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "b1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "b2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5003,16 +5113,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "bb1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "bb2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5022,6 +5135,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396b}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(c), /*size*/ sizeof(c),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5030,16 +5144,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "c1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "c2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5049,16 +5166,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396c}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "cc1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "cc2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5068,6 +5188,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396d}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(d), /*size*/ sizeof(d),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5076,16 +5197,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "d1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "d2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5095,16 +5219,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a75396e}",
/*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "dd1", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "dd2", /*flags*/ 0, /*kind*/ VAR_CONST,
{ .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5114,6 +5241,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753970}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(e), /*size*/ sizeof(e),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5122,11 +5250,13 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct _e), /*size*/ sizeof(struct _e),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "e1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5136,11 +5266,13 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753971}",
/*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(struct ee), /*size*/ sizeof(struct ee),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "ee1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5150,6 +5282,7 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753972}",
/*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(f), /*size*/ sizeof(f),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */ },
},
@@ -5158,16 +5291,19 @@ static const type_info info[] = {
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union _f), /*size*/ sizeof(union _f),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "f1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "f2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5177,16 +5313,19 @@ static const type_info info[] = {
"{016fe2ec-b2c8-45f8-b23b-39e53a753973}",
/*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ TYPE_ALIGNMENT(union ff), /*size*/ sizeof(union ff),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */ },
{ /* vars */
{
/*id*/ 0x40000000, /*name*/ "ff1", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0x40000001, /*name*/ "ff2", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
{ .oInst = 0 },
+ /*#custdata*/ 0, {},
{VT_PTR, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5196,11 +5335,13 @@ static const type_info info[] = {
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestIface*), /*size*/ sizeof(ITestIface*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 13, /*#func*/ 6, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5215,6 +5356,7 @@ static const type_info info[] = {
/*id*/ 0x60020001, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ENUM, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5229,6 +5371,7 @@ static const type_info info[] = {
/*id*/ 0x60020002, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5243,6 +5386,7 @@ static const type_info info[] = {
/*id*/ 0x60020003, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5257,6 +5401,7 @@ static const type_info info[] = {
/*id*/ 0x60020004, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5271,6 +5416,7 @@ static const type_info info[] = {
/*id*/ 0x60020005, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
{-1, 0, 0}
@@ -5289,11 +5435,13 @@ static const type_info info[] = {
"{2d4430d5-99ea-4645-85f0-c5814b72804b}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestDispatch*), /*size*/ sizeof(ITestDispatch*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 7, /*#var*/ 2,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5306,6 +5454,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5320,6 +5469,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5332,6 +5482,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5346,6 +5497,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5358,6 +5510,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5372,6 +5525,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{VT_I4, -1, PARAMFLAG_FLCID},
@@ -5389,11 +5543,13 @@ static const type_info info[] = {
{
/*id*/ 0xa, /*name*/ "property_int", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
{ /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 0, {},
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
},
{
/*id*/ 0xb, /*name*/ "property_HRESULT", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
{ /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 0, {},
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
},
},
@@ -5403,11 +5559,13 @@ static const type_info info[] = {
"{79ca07f9-ac22-44ac-9aaf-811f45412293}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(ITestDispDual*), /*size*/ sizeof(ITestDispDual*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 14, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -5424,6 +5582,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5436,6 +5595,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5448,6 +5608,7 @@ static const type_info info[] = {
/*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT},
{-1, 0, 0}
@@ -5462,6 +5623,7 @@ static const type_info info[] = {
/*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_UINT, -1, PARAMFLAG_FIN},
{VT_UI4, -1, PARAMFLAG_FIN},
@@ -5480,6 +5642,7 @@ static const type_info info[] = {
/*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5502,6 +5665,7 @@ static const type_info info[] = {
/*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_I4, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5530,6 +5694,7 @@ static const type_info info[] = {
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5542,6 +5707,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5554,6 +5720,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5566,6 +5733,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5578,6 +5746,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5590,6 +5759,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5602,6 +5772,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -5620,11 +5791,13 @@ static const type_info info[] = {
"{79ca07f9-ac22-44ac-9aaf-811f45412293}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FOLEAUTOMATION|TYPEFLAG_FDUAL, /*align*/ TYPE_ALIGNMENT(ITestDispDual*), /*size*/ sizeof(ITestDispDual*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 14, /*#func*/ 7, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x1, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5637,6 +5810,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5651,6 +5825,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5663,6 +5838,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5677,6 +5853,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5689,6 +5866,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
{-1, 0, 0}
@@ -5703,6 +5881,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{VT_I4, -1, PARAMFLAG_FLCID},
@@ -5725,11 +5904,13 @@ static const type_info info[] = {
"{cdb105e3-24fb-4ae6-b826-801b7b2a0a07}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(ITestDispInherit*), /*size*/ sizeof(ITestDispInherit*),
/*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 14, /*#var*/ 0,
+ /*#custdata*/ 0, {},
{ /* funcs */
{
/*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FOUT},
@@ -5746,6 +5927,7 @@ static const type_info info[] = {
/*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5758,6 +5940,7 @@ static const type_info info[] = {
/*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_UI4, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5770,6 +5953,7 @@ static const type_info info[] = {
/*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FOUT},
{-1, 0, 0}
@@ -5784,6 +5968,7 @@ static const type_info info[] = {
/*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_UINT, -1, PARAMFLAG_FIN},
{VT_UI4, -1, PARAMFLAG_FIN},
@@ -5802,6 +5987,7 @@ static const type_info info[] = {
/*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_PTR, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5824,6 +6010,7 @@ static const type_info info[] = {
/*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_I4, -1, PARAMFLAG_FIN},
{VT_PTR, -1, PARAMFLAG_FIN},
@@ -5852,6 +6039,7 @@ static const type_info info[] = {
/*id*/ 0x1, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5864,6 +6052,7 @@ static const type_info info[] = {
/*id*/ 0x2, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5876,6 +6065,7 @@ static const type_info info[] = {
/*id*/ 0x3, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0,
{VT_VOID, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5888,6 +6078,7 @@ static const type_info info[] = {
/*id*/ 0x4, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5900,6 +6091,7 @@ static const type_info info[] = {
/*id*/ 0x5, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
{VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5912,6 +6104,7 @@ static const type_info info[] = {
/*id*/ 0x6, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{-1, 0, 0}
},
@@ -5924,6 +6117,7 @@ static const type_info info[] = {
/*id*/ 0x7, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 13, /*#scodes*/ 0, /*flags*/ 0,
{VT_R8, -1, PARAMFLAG_NONE}, /* ret */
+ /*#custdata*/ 0, {},
{ /* params */
{VT_BSTR, -1, PARAMFLAG_FIN},
{-1, 0, 0}
@@ -5962,11 +6156,18 @@ static const type_info info[] = {
expect_hex(U(*(elem)).paramdesc.wParamFlags, (info)->wParamFlags); \
}
+static void parse_guid(LPCSTR strGuid, GUID *guid)
+{
+ WCHAR guidW[39];
+ MultiByteToWideChar(CP_ACP, 0, strGuid, -1, guidW, ARRAY_SIZE(guidW));
+ ole_check(IIDFromString(guidW, guid));
+}
+
static void test_dump_typelib(const WCHAR *name)
{
ITypeLib *typelib;
CUSTDATA cust_data;
- int iface = 0, func, var;
+ int iface = 0, func, var, cust;
HREFTYPE hRefType = 0;
VARIANT v;
HRESULT hr;
@@ -6016,13 +6217,11 @@ static void test_dump_typelib(const WCHAR *name)
/* compare type uuid */
if (ti->uuid && *ti->uuid)
{
- WCHAR guidW[39];
ITypeInfo *typeinfo2;
HRESULT hr;
GUID guid;
- MultiByteToWideChar(CP_ACP, 0, ti->uuid, -1, guidW, ARRAY_SIZE(guidW));
- IIDFromString(guidW, &guid);
+ parse_guid(ti->uuid,&guid);
expect_guid(&guid, &typeattr->guid);
/* check that it's possible to search using this uuid */
@@ -6032,9 +6231,26 @@ static void test_dump_typelib(const WCHAR *name)
if (hr == S_OK) ITypeInfo_Release(typeinfo2);
}
+ ole_check(ITypeInfo_GetTypeAttr(typeinfo, &typeattr));
+
hr = ITypeInfo_QueryInterface(typeinfo, &IID_ITypeInfo2, (void**)&typeinfo2);
ok(hr == S_OK, "Could not get ITypeInfo2: %08x\n", hr);
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllCustData(typeinfo2,&cust_data));
+ expect_int(cust_data.cCustData, ti->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < ti->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(ti->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetCustData(typeinfo2,&guid,&v);
+ ok(hr == S_OK, "GetCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&ti->custdata[cust].value);
+ VariantClear(&v);
+ }
+
for (func = 0; func < typeattr->cFuncs; func++)
{
const function_info *fn_info = &ti->funcs[func];
@@ -6054,6 +6270,22 @@ static void test_dump_typelib(const WCHAR *name)
expect_int(desc->oVft, fn_info->vtbl_index * sizeof(void*));
expect_int(desc->cScodes, fn_info->cScodes);
expect_int(desc->wFuncFlags, fn_info->wFuncFlags);
+
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllFuncCustData(typeinfo2,func,&cust_data));
+ expect_int(cust_data.cCustData, fn_info->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < fn_info->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(fn_info->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetFuncCustData(typeinfo2,func,&guid,&v);
+ ok(hr == S_OK, "GetCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&fn_info->custdata[cust].value);
+ VariantClear(&v);
+ }
+
ole_check(ITypeInfo_GetNames(typeinfo, desc->memid, namesTab, 256, &cNames));
for (i = 0; i < cNames; i++)
{
@@ -6067,6 +6299,21 @@ static void test_dump_typelib(const WCHAR *name)
{
check_type(&desc->lprgelemdescParam[i], &fn_info->params[i]);
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllParamCustData(typeinfo2,func,i,&cust_data));
+ expect_int(cust_data.cCustData, fn_info->params[i].cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < fn_info->params[i].cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(fn_info->params[i].custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetParamCustData(typeinfo2,func,i,&guid,&v);
+ ok(hr == S_OK, "GetParamCustDatafailed: %08x\n", hr);
+ check_variant_info(&v,&fn_info->params[i].custdata[cust].value);
+ VariantClear(&v);
+ }
+
if (desc->lprgelemdescParam[i].tdesc.vt == VT_USERDEFINED)
{
ITypeInfo *param;
@@ -6096,9 +6343,7 @@ static void test_dump_typelib(const WCHAR *name)
VariantClear(&v);
memset(&cust_data, 0, sizeof(cust_data));
- hr = ITypeInfo2_GetAllCustData(typeinfo2, &cust_data);
ITypeInfo_ReleaseFuncDesc(typeinfo, desc);
- ClearCustData(&cust_data);
}
for (var = 0; var < typeattr->cVars; var++)
@@ -6132,6 +6377,20 @@ static void test_dump_typelib(const WCHAR *name)
} else {
expect_null(desc->DUMMYUNIONNAME.lpvarValue);
}
+ memset(&cust_data, 0, sizeof(cust_data));
+ ole_check(ITypeInfo2_GetAllVarCustData(typeinfo2,var,&cust_data));
+ expect_int(cust_data.cCustData, var_info->cCustData);
+ ClearCustData(&cust_data);
+ for (cust = 0; cust < var_info->cCustData; cust++)
+ {
+ GUID guid;
+ parse_guid(var_info->custdata[cust].uuid,&guid);
+ /* check that it's possible to search using this uuid */
+ hr = ITypeInfo2_GetVarCustData(typeinfo2,var,&guid,&v);
+ ok(hr == S_OK, "GetVarCustData failed: %08x\n", hr);
+ check_variant_info(&v,&var_info->custdata[cust].value);
+ VariantClear(&v);
+ }
check_type(&desc->elemdescVar, &var_info->elemdescVar);
1
5