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
- 7 participants
- 84546 discussions
[PATCH 7/7] winapi_test: Minor $pointer_size check consistency tweak.
by Serge Gautherie Aug. 7, 2020
by Serge Gautherie Aug. 7, 2020
Aug. 7, 2020
Signed-off-by: Serge Gautherie <winehq-git_serge_180711(a)gautherie.fr>
---
Addendum to a8e86e35dd1822e62893eb47af14b7b0e8e11b4a.
---
tools/winapi/winapi_test | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test
index 12e35cf..749319c 100755
--- a/tools/winapi/winapi_test
+++ b/tools/winapi/winapi_test
@@ -418,7 +418,7 @@ foreach my $file (@files) {
} elsif ($preprocessor =~ /^\#\s*ifdef\s+_WIN64/) {
push @ifdefs, ($pointer_size == 8);
} elsif ($preprocessor =~ /^\#\s*ifndef\s+_WIN64/) {
- push @ifdefs, ($pointer_size == 4);
+ push @ifdefs, ($pointer_size != 8);
} elsif ($preprocessor =~ /^\#\s*elif\s+defined\(_WIN64\)/) {
$ifdefs[$#ifdefs] = ($pointer_size == 8);
} elsif ($preprocessor =~ /^\#\s*ifdef\s/) {
--
2.10.0.windows.1
2
1
[PATCH 6/7] winapi_test: Restore horizontal alignment of macro defines.
by Serge Gautherie Aug. 7, 2020
by Serge Gautherie Aug. 7, 2020
Aug. 7, 2020
Signed-off-by: Serge Gautherie <winehq-git_serge_180711(a)gautherie.fr>
---
Addendum to a8e86e35dd1822e62893eb47af14b7b0e8e11b4a.
---
dlls/gdi32/tests/generated.c | 10 +++++-----
dlls/kernel32/tests/generated.c | 10 +++++-----
dlls/ntdll/tests/generated.c | 10 +++++-----
dlls/rpcrt4/tests/generated.c | 10 +++++-----
dlls/shell32/tests/generated.c | 10 +++++-----
dlls/shlwapi/tests/generated.c | 10 +++++-----
dlls/urlmon/tests/generated.c | 10 +++++-----
dlls/user32/tests/generated.c | 10 +++++-----
dlls/wininet/tests/generated.c | 10 +++++-----
dlls/winmm/tests/generated.c | 10 +++++-----
tools/winapi/winapi_test | 10 +++++-----
11 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/dlls/gdi32/tests/generated.c b/dlls/gdi32/tests/generated.c
index fe3ecd9..6b00060 100644
--- a/dlls/gdi32/tests/generated.c
+++ b/dlls/gdi32/tests/generated.c
@@ -47,23 +47,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/kernel32/tests/generated.c b/dlls/kernel32/tests/generated.c
index 7606580..9c83ec6 100644
--- a/dlls/kernel32/tests/generated.c
+++ b/dlls/kernel32/tests/generated.c
@@ -47,23 +47,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/ntdll/tests/generated.c b/dlls/ntdll/tests/generated.c
index e51ce27..bf705a4 100644
--- a/dlls/ntdll/tests/generated.c
+++ b/dlls/ntdll/tests/generated.c
@@ -47,23 +47,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/rpcrt4/tests/generated.c b/dlls/rpcrt4/tests/generated.c
index 7dd5968..fe8bc4b 100644
--- a/dlls/rpcrt4/tests/generated.c
+++ b/dlls/rpcrt4/tests/generated.c
@@ -53,23 +53,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/shell32/tests/generated.c b/dlls/shell32/tests/generated.c
index 4a1a5b9..34626c2 100644
--- a/dlls/shell32/tests/generated.c
+++ b/dlls/shell32/tests/generated.c
@@ -54,23 +54,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/shlwapi/tests/generated.c b/dlls/shlwapi/tests/generated.c
index 3a8e426..0b9f109 100644
--- a/dlls/shlwapi/tests/generated.c
+++ b/dlls/shlwapi/tests/generated.c
@@ -52,23 +52,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/urlmon/tests/generated.c b/dlls/urlmon/tests/generated.c
index 45fd5d8..6495949 100644
--- a/dlls/urlmon/tests/generated.c
+++ b/dlls/urlmon/tests/generated.c
@@ -50,23 +50,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/user32/tests/generated.c b/dlls/user32/tests/generated.c
index be1b698..7f6325f 100644
--- a/dlls/user32/tests/generated.c
+++ b/dlls/user32/tests/generated.c
@@ -47,23 +47,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/wininet/tests/generated.c b/dlls/wininet/tests/generated.c
index aec942c..39a34f7 100644
--- a/dlls/wininet/tests/generated.c
+++ b/dlls/wininet/tests/generated.c
@@ -51,23 +51,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/dlls/winmm/tests/generated.c b/dlls/winmm/tests/generated.c
index 78051c6..ccc0d20 100644
--- a/dlls/winmm/tests/generated.c
+++ b/dlls/winmm/tests/generated.c
@@ -49,23 +49,23 @@
* Test helper macros
*/
-#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
#ifdef TYPE_ALIGNMENT
-# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
#else
# define TEST_TYPE_ALIGN(type, align)
#endif
#ifdef _TYPE_ALIGNMENT
-# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
-# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
#else
# define TEST_TARGET_ALIGN(type, align)
# define TEST_FIELD_ALIGN(type, field, align)
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test
index 05fdace..12e35cf 100755
--- a/tools/winapi/winapi_test
+++ b/tools/winapi/winapi_test
@@ -566,23 +566,23 @@ sub output_header($$$) {
print OUT " * Test helper macros\n";
print OUT " */\n";
print OUT "\n";
- print OUT "#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);\n";
+ print OUT "#define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);\n";
print OUT "\n";
print OUT "#ifdef TYPE_ALIGNMENT\n";
- print OUT "# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);\n";
+ print OUT "# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);\n";
print OUT "#else\n";
print OUT "# define TEST_TYPE_ALIGN(type, align)\n";
print OUT "#endif\n";
print OUT "\n";
print OUT "#ifdef _TYPE_ALIGNMENT\n";
- print OUT "# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);\n";
- print OUT "# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);\n";
+ print OUT "# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);\n";
+ print OUT "# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);\n";
print OUT "#else\n";
print OUT "# define TEST_TARGET_ALIGN(type, align)\n";
print OUT "# define TEST_FIELD_ALIGN(type, field, align)\n";
print OUT "#endif\n";
print OUT "\n";
- print OUT "#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);\n";
+ print OUT "#define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);\n";
print OUT "\n";
print OUT "#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)\n";
print OUT "#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)\n";
--
2.10.0.windows.1
2
1
Aug. 7, 2020
Signed-off-by: Serge Gautherie <winehq-git_serge_180711(a)gautherie.fr>
---
Fix _WIN64 case.
Addendum to a8e86e35dd1822e62893eb47af14b7b0e8e11b4a.
---
tools/winapi/winapi_test | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test
index 09c6614..05fdace 100755
--- a/tools/winapi/winapi_test
+++ b/tools/winapi/winapi_test
@@ -231,9 +231,9 @@ sub _find_align_kind_size($) {
$kind = "float";
$size = 4;
} elsif (/^(?:(signed|unsigned)\s+)?(?:long(?:\s+int)?)$/) {
- $align = $pointer_size;
+ $align = 4;
$kind = defined($1) ? $1 : "signed";
- $size = $pointer_size;
+ $size = 4;
} elsif (/^(?:(signed|unsigned)\s+)?__int64$/) {
$align = 8;
$kind = defined($1) ? $1 : "signed";
--
2.10.0.windows.1
2
1
Signed-off-by: Serge Gautherie <winehq-git_serge_180711(a)gautherie.fr>
---
Fix parsing related to a few *_PTR types from basetsd.h.
Addendum to 6b11a3c3f81d7db3794f3320eeaef8001cc99b74.
---
tools/winapi/winapi_test | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test
index 4a0a396..09c6614 100755
--- a/tools/winapi/winapi_test
+++ b/tools/winapi/winapi_test
@@ -419,7 +419,7 @@ foreach my $file (@files) {
push @ifdefs, ($pointer_size == 8);
} elsif ($preprocessor =~ /^\#\s*ifndef\s+_WIN64/) {
push @ifdefs, ($pointer_size == 4);
- } elsif ($preprocessor =~ /^\#\s*elif\s+defined(_WIN64)/) {
+ } elsif ($preprocessor =~ /^\#\s*elif\s+defined\(_WIN64\)/) {
$ifdefs[$#ifdefs] = ($pointer_size == 8);
} elsif ($preprocessor =~ /^\#\s*ifdef\s/) {
push @ifdefs, 2;
--
2.10.0.windows.1
2
1
[PATCH 3/7] winapi_test: Horizontally align TEST_TYPE_SIGNED() parameter.
by Serge Gautherie Aug. 7, 2020
by Serge Gautherie Aug. 7, 2020
Aug. 7, 2020
Signed-off-by: Serge Gautherie <reactos-git_serge_171003(a)gautherie.fr>
---
Addendum to 5554838292c0c4eb34158e570bc8509e66f6a428.
---
dlls/ntdll/tests/generated.c | 60 +++++++++++++++++++++---------------------
dlls/shell32/tests/generated.c | 4 +--
dlls/wininet/tests/generated.c | 4 +--
tools/winapi/winapi_test | 2 +-
4 files changed, 35 insertions(+), 35 deletions(-)
diff --git a/dlls/ntdll/tests/generated.c b/dlls/ntdll/tests/generated.c
index d277e02..e51ce27 100644
--- a/dlls/ntdll/tests/generated.c
+++ b/dlls/ntdll/tests/generated.c
@@ -101,7 +101,7 @@ static void test_pack_HALF_PTR(void)
/* HALF_PTR */
TEST_TYPE_SIZE (HALF_PTR, 4)
TEST_TYPE_ALIGN (HALF_PTR, 4)
- TEST_TYPE_SIGNED(HALF_PTR)
+ TEST_TYPE_SIGNED (HALF_PTR)
}
static void test_pack_INT16(void)
@@ -109,7 +109,7 @@ static void test_pack_INT16(void)
/* INT16 */
TEST_TYPE_SIZE (INT16, 2)
TEST_TYPE_ALIGN (INT16, 2)
- TEST_TYPE_SIGNED(INT16)
+ TEST_TYPE_SIGNED (INT16)
}
static void test_pack_INT32(void)
@@ -117,7 +117,7 @@ static void test_pack_INT32(void)
/* INT32 */
TEST_TYPE_SIZE (INT32, 4)
TEST_TYPE_ALIGN (INT32, 4)
- TEST_TYPE_SIGNED(INT32)
+ TEST_TYPE_SIGNED (INT32)
}
static void test_pack_INT64(void)
@@ -125,7 +125,7 @@ static void test_pack_INT64(void)
/* INT64 */
TEST_TYPE_SIZE (INT64, 8)
TEST_TYPE_ALIGN (INT64, 8)
- TEST_TYPE_SIGNED(INT64)
+ TEST_TYPE_SIGNED (INT64)
}
static void test_pack_INT8(void)
@@ -133,7 +133,7 @@ static void test_pack_INT8(void)
/* INT8 */
TEST_TYPE_SIZE (INT8, 1)
TEST_TYPE_ALIGN (INT8, 1)
- TEST_TYPE_SIGNED(INT8)
+ TEST_TYPE_SIGNED (INT8)
}
static void test_pack_INT_PTR(void)
@@ -141,7 +141,7 @@ static void test_pack_INT_PTR(void)
/* INT_PTR */
TEST_TYPE_SIZE (INT_PTR, 8)
TEST_TYPE_ALIGN (INT_PTR, 8)
- TEST_TYPE_SIGNED(INT_PTR)
+ TEST_TYPE_SIGNED (INT_PTR)
}
static void test_pack_LONG32(void)
@@ -149,7 +149,7 @@ static void test_pack_LONG32(void)
/* LONG32 */
TEST_TYPE_SIZE (LONG32, 4)
TEST_TYPE_ALIGN (LONG32, 4)
- TEST_TYPE_SIGNED(LONG32)
+ TEST_TYPE_SIGNED (LONG32)
}
static void test_pack_LONG64(void)
@@ -157,7 +157,7 @@ static void test_pack_LONG64(void)
/* LONG64 */
TEST_TYPE_SIZE (LONG64, 8)
TEST_TYPE_ALIGN (LONG64, 8)
- TEST_TYPE_SIGNED(LONG64)
+ TEST_TYPE_SIGNED (LONG64)
}
static void test_pack_LONG_PTR(void)
@@ -165,7 +165,7 @@ static void test_pack_LONG_PTR(void)
/* LONG_PTR */
TEST_TYPE_SIZE (LONG_PTR, 8)
TEST_TYPE_ALIGN (LONG_PTR, 8)
- TEST_TYPE_SIGNED(LONG_PTR)
+ TEST_TYPE_SIGNED (LONG_PTR)
}
static void test_pack_SIZE_T(void)
@@ -1738,7 +1738,7 @@ static void test_pack_LONG(void)
/* LONG */
TEST_TYPE_SIZE (LONG, 4)
TEST_TYPE_ALIGN (LONG, 4)
- TEST_TYPE_SIGNED(LONG)
+ TEST_TYPE_SIGNED (LONG)
}
static void test_pack_LONGLONG(void)
@@ -1746,7 +1746,7 @@ static void test_pack_LONGLONG(void)
/* LONGLONG */
TEST_TYPE_SIZE (LONGLONG, 8)
TEST_TYPE_ALIGN (LONGLONG, 8)
- TEST_TYPE_SIGNED(LONGLONG)
+ TEST_TYPE_SIGNED (LONGLONG)
}
static void test_pack_LUID(void)
@@ -2896,7 +2896,7 @@ static void test_pack_SHORT(void)
/* SHORT */
TEST_TYPE_SIZE (SHORT, 2)
TEST_TYPE_ALIGN (SHORT, 2)
- TEST_TYPE_SIGNED(SHORT)
+ TEST_TYPE_SIGNED (SHORT)
}
static void test_pack_SID(void)
@@ -3117,7 +3117,7 @@ static void test_pack_BOOL(void)
/* BOOL */
TEST_TYPE_SIZE (BOOL, 4)
TEST_TYPE_ALIGN (BOOL, 4)
- TEST_TYPE_SIGNED(BOOL)
+ TEST_TYPE_SIGNED (BOOL)
}
static void test_pack_BYTE(void)
@@ -3177,7 +3177,7 @@ static void test_pack_HFILE(void)
/* HFILE */
TEST_TYPE_SIZE (HFILE, 4)
TEST_TYPE_ALIGN (HFILE, 4)
- TEST_TYPE_SIGNED(HFILE)
+ TEST_TYPE_SIGNED (HFILE)
}
static void test_pack_HGDIOBJ(void)
@@ -3213,7 +3213,7 @@ static void test_pack_INT(void)
/* INT */
TEST_TYPE_SIZE (INT, 4)
TEST_TYPE_ALIGN (INT, 4)
- TEST_TYPE_SIGNED(INT)
+ TEST_TYPE_SIGNED (INT)
}
static void test_pack_LOCALHANDLE(void)
@@ -3518,7 +3518,7 @@ static void test_pack_HALF_PTR(void)
/* HALF_PTR */
TEST_TYPE_SIZE (HALF_PTR, 2)
TEST_TYPE_ALIGN (HALF_PTR, 2)
- TEST_TYPE_SIGNED(HALF_PTR)
+ TEST_TYPE_SIGNED (HALF_PTR)
}
static void test_pack_INT16(void)
@@ -3526,7 +3526,7 @@ static void test_pack_INT16(void)
/* INT16 */
TEST_TYPE_SIZE (INT16, 2)
TEST_TYPE_ALIGN (INT16, 2)
- TEST_TYPE_SIGNED(INT16)
+ TEST_TYPE_SIGNED (INT16)
}
static void test_pack_INT32(void)
@@ -3534,7 +3534,7 @@ static void test_pack_INT32(void)
/* INT32 */
TEST_TYPE_SIZE (INT32, 4)
TEST_TYPE_ALIGN (INT32, 4)
- TEST_TYPE_SIGNED(INT32)
+ TEST_TYPE_SIGNED (INT32)
}
static void test_pack_INT64(void)
@@ -3542,7 +3542,7 @@ static void test_pack_INT64(void)
/* INT64 */
TEST_TYPE_SIZE (INT64, 8)
TEST_TYPE_ALIGN (INT64, 8)
- TEST_TYPE_SIGNED(INT64)
+ TEST_TYPE_SIGNED (INT64)
}
static void test_pack_INT8(void)
@@ -3550,7 +3550,7 @@ static void test_pack_INT8(void)
/* INT8 */
TEST_TYPE_SIZE (INT8, 1)
TEST_TYPE_ALIGN (INT8, 1)
- TEST_TYPE_SIGNED(INT8)
+ TEST_TYPE_SIGNED (INT8)
}
static void test_pack_INT_PTR(void)
@@ -3558,7 +3558,7 @@ static void test_pack_INT_PTR(void)
/* INT_PTR */
TEST_TYPE_SIZE (INT_PTR, 4)
TEST_TYPE_ALIGN (INT_PTR, 4)
- TEST_TYPE_SIGNED(INT_PTR)
+ TEST_TYPE_SIGNED (INT_PTR)
}
static void test_pack_LONG32(void)
@@ -3566,7 +3566,7 @@ static void test_pack_LONG32(void)
/* LONG32 */
TEST_TYPE_SIZE (LONG32, 4)
TEST_TYPE_ALIGN (LONG32, 4)
- TEST_TYPE_SIGNED(LONG32)
+ TEST_TYPE_SIGNED (LONG32)
}
static void test_pack_LONG64(void)
@@ -3574,7 +3574,7 @@ static void test_pack_LONG64(void)
/* LONG64 */
TEST_TYPE_SIZE (LONG64, 8)
TEST_TYPE_ALIGN (LONG64, 8)
- TEST_TYPE_SIGNED(LONG64)
+ TEST_TYPE_SIGNED (LONG64)
}
static void test_pack_LONG_PTR(void)
@@ -3582,7 +3582,7 @@ static void test_pack_LONG_PTR(void)
/* LONG_PTR */
TEST_TYPE_SIZE (LONG_PTR, 4)
TEST_TYPE_ALIGN (LONG_PTR, 4)
- TEST_TYPE_SIGNED(LONG_PTR)
+ TEST_TYPE_SIGNED (LONG_PTR)
}
static void test_pack_SIZE_T(void)
@@ -5155,7 +5155,7 @@ static void test_pack_LONG(void)
/* LONG */
TEST_TYPE_SIZE (LONG, 4)
TEST_TYPE_ALIGN (LONG, 4)
- TEST_TYPE_SIGNED(LONG)
+ TEST_TYPE_SIGNED (LONG)
}
static void test_pack_LONGLONG(void)
@@ -5163,7 +5163,7 @@ static void test_pack_LONGLONG(void)
/* LONGLONG */
TEST_TYPE_SIZE (LONGLONG, 8)
TEST_TYPE_ALIGN (LONGLONG, 8)
- TEST_TYPE_SIGNED(LONGLONG)
+ TEST_TYPE_SIGNED (LONGLONG)
}
static void test_pack_LUID(void)
@@ -6313,7 +6313,7 @@ static void test_pack_SHORT(void)
/* SHORT */
TEST_TYPE_SIZE (SHORT, 2)
TEST_TYPE_ALIGN (SHORT, 2)
- TEST_TYPE_SIGNED(SHORT)
+ TEST_TYPE_SIGNED (SHORT)
}
static void test_pack_SID(void)
@@ -6534,7 +6534,7 @@ static void test_pack_BOOL(void)
/* BOOL */
TEST_TYPE_SIZE (BOOL, 4)
TEST_TYPE_ALIGN (BOOL, 4)
- TEST_TYPE_SIGNED(BOOL)
+ TEST_TYPE_SIGNED (BOOL)
}
static void test_pack_BYTE(void)
@@ -6594,7 +6594,7 @@ static void test_pack_HFILE(void)
/* HFILE */
TEST_TYPE_SIZE (HFILE, 4)
TEST_TYPE_ALIGN (HFILE, 4)
- TEST_TYPE_SIGNED(HFILE)
+ TEST_TYPE_SIGNED (HFILE)
}
static void test_pack_HGDIOBJ(void)
@@ -6630,7 +6630,7 @@ static void test_pack_INT(void)
/* INT */
TEST_TYPE_SIZE (INT, 4)
TEST_TYPE_ALIGN (INT, 4)
- TEST_TYPE_SIGNED(INT)
+ TEST_TYPE_SIGNED (INT)
}
static void test_pack_LOCALHANDLE(void)
diff --git a/dlls/shell32/tests/generated.c b/dlls/shell32/tests/generated.c
index 55f4eab..4a1a5b9 100644
--- a/dlls/shell32/tests/generated.c
+++ b/dlls/shell32/tests/generated.c
@@ -485,7 +485,7 @@ static void test_pack_VARIANT_BOOL(void)
/* VARIANT_BOOL */
TEST_TYPE_SIZE (VARIANT_BOOL, 2)
TEST_TYPE_ALIGN (VARIANT_BOOL, 2)
- TEST_TYPE_SIGNED(VARIANT_BOOL)
+ TEST_TYPE_SIGNED (VARIANT_BOOL)
}
static void test_pack_VARTYPE(void)
@@ -2303,7 +2303,7 @@ static void test_pack_VARIANT_BOOL(void)
/* VARIANT_BOOL */
TEST_TYPE_SIZE (VARIANT_BOOL, 2)
TEST_TYPE_ALIGN (VARIANT_BOOL, 2)
- TEST_TYPE_SIGNED(VARIANT_BOOL)
+ TEST_TYPE_SIGNED (VARIANT_BOOL)
}
static void test_pack_VARTYPE(void)
diff --git a/dlls/wininet/tests/generated.c b/dlls/wininet/tests/generated.c
index f88834a..aec942c 100644
--- a/dlls/wininet/tests/generated.c
+++ b/dlls/wininet/tests/generated.c
@@ -486,7 +486,7 @@ static void test_pack_GROUPID(void)
/* GROUPID */
TEST_TYPE_SIZE (GROUPID, 8)
TEST_TYPE_ALIGN (GROUPID, 8)
- TEST_TYPE_SIGNED(GROUPID)
+ TEST_TYPE_SIGNED (GROUPID)
}
static void test_pack_HINTERNET(void)
@@ -1723,7 +1723,7 @@ static void test_pack_GROUPID(void)
/* GROUPID */
TEST_TYPE_SIZE (GROUPID, 8)
TEST_TYPE_ALIGN (GROUPID, 8)
- TEST_TYPE_SIGNED(GROUPID)
+ TEST_TYPE_SIGNED (GROUPID)
}
static void test_pack_HINTERNET(void)
diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test
index a700cfc..4a0a396 100755
--- a/tools/winapi/winapi_test
+++ b/tools/winapi/winapi_test
@@ -692,7 +692,7 @@ sub output_test_pack_type($$$$$$) {
}
}
} elsif ($type_kind eq "signed") {
- print OUT " TEST_TYPE_SIGNED($type_name)\n";
+ print OUT " TEST_TYPE_SIGNED ($type_name)\n";
} elsif ($type_kind eq "unsigned") {
print OUT " TEST_TYPE_UNSIGNED($type_name)\n";
}
--
2.10.0.windows.1
2
1
Aug. 7, 2020
Signed-off-by: Serge Gautherie <winehq-git_serge_180711(a)gautherie.fr>
---
Addendum to df6d37e0f219ba714d59306a166b75686469211f.
---
tools/winapi/winapi_test | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/winapi/winapi_test b/tools/winapi/winapi_test
index 762d7af..a700cfc 100755
--- a/tools/winapi/winapi_test
+++ b/tools/winapi/winapi_test
@@ -409,7 +409,7 @@ foreach my $file (@files) {
my $preprocessor = shift;
#print "found_preprocessor: $begin_line: [$_]\n";
- if ($preprocessor =~ /^\#\s*include\s+[\"<]pshpack(\d+)\.h[\">]$/) {
+ if ($preprocessor =~ /^\#\s*include\s+[\"<]pshpack(\d)\.h[\">]$/) {
push @packs, $1 unless @ifdefs && !$ifdefs[$#ifdefs];
#print "found pack $1 on line $begin_line\n";
} elsif($preprocessor =~ /^\#\s*include\s+[\"<]poppack\.h[\">]$/) {
--
2.10.0.windows.1
2
1
Aug. 7, 2020
Signed-off-by: Serge Gautherie <winehq-git_serge_180711(a)gautherie.fr>
---
Fix to run on Windows.
Addendum to 5bc9a0b62388d22b48ca2abdc2f1cd9b2a496221.
---
tools/winapi/setup.pm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/winapi/setup.pm b/tools/winapi/setup.pm
index ed08460..f23bba1 100644
--- a/tools/winapi/setup.pm
+++ b/tools/winapi/setup.pm
@@ -54,7 +54,7 @@ BEGIN {
if($wine_dir =~ /^\./) {
$current_dir = ".";
- my $pwd; chomp($pwd = `pwd`);
+ my $pwd; chomp($pwd = $cwd);
foreach my $n (1..((length($wine_dir) + 1) / 3)) {
$pwd =~ s/\/([^\/]*)$//;
$current_dir = "$1/$current_dir";
--
2.10.0.windows.1
2
1
Aug. 7, 2020
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
dlls/oleaut32/tests/test_tlb.idl | 51 +++++++++-
dlls/oleaut32/tests/typelib.c | 168 +++++++++++++++++++++++++++++++
dlls/oleaut32/typelib.c | 3 +
3 files changed, 221 insertions(+), 1 deletion(-)
diff --git a/dlls/oleaut32/tests/test_tlb.idl b/dlls/oleaut32/tests/test_tlb.idl
index b8fecc9a01..251897c91e 100644
--- a/dlls/oleaut32/tests/test_tlb.idl
+++ b/dlls/oleaut32/tests/test_tlb.idl
@@ -26,7 +26,17 @@ import "oaidl.idl"; /* needed by widl */
midl_pragma warning ( disable : 2368 )
-[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784)]
+#define CUSTDATA_BSTR c8768723-e6d2-4442-b039-92e9c82429c4
+
+#define CUSTDATA_STRLIT c8768723-e6d2-4442-b039-92e9c82429c4
+#define CUSTDATA_NUM b481b478-a181-4eb6-b6e0-df63069e8c80
+#define CUSTDATA_HEXNUM a09d7c06-cf38-4db3-9450-10641651c35b
+
+[uuid(8b05fe77-4a6c-4133-b9cd-8f81747af784),
+custom(CUSTDATA_STRLIT,"ITypeLib2::GetCustData"),
+custom(CUSTDATA_NUM,42),
+custom(CUSTDATA_HEXNUM,0x1337C0D3),
+]
library Test
{
importlib("stdole2.tlb");
@@ -170,4 +180,43 @@ library Test
{
interface ITestDispDual;
}
+
+ [uuid(786ee4ff-c5dd-4bf4-9578-0d22fb5369cc),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData interface")]
+ interface custdata_interface : IDispatch
+ {
+ [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetFuncCustData custdata_interface::test_method")]
+ HRESULT test_method([in,custom(CUSTDATA_STRLIT,"ITypeInfo2::GetParamCustData custdata_interface::test_method(x)")] int x);
+ }
+
+ [uuid(6ca99f5e-c86a-42ad-a5ee-5bd4c8e5553c),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData enum")]
+ enum custdata_enum {
+ One, Two
+ };
+
+ [uuid(62fabe17-f733-4b09-b859-3f455dcda450),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData struct")]
+ struct custdata_struct {
+ [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData struct")]
+ int test_field;
+ };
+
+ [/* uuid(...) not allowed on union */ custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData union")]
+ union custdata_union {
+ [custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData union")]
+ int test_field;
+ };
+
+ [public,uuid(d58744d6-63f9-467c-87e5-c95158098b18),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData typedef")]
+ typedef custdata_interface * custdata_typedef;
+
+ [uuid(bffc216e-2159-465a-80df-b85fd4f4f122),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetCustData dispinterface")]
+ dispinterface custdata_dispatch
+ {
+properties:
+ [id(0),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetVarCustData dispinterface property")]
+ int test_property;
+methods:
+ [id(1),custom(CUSTDATA_STRLIT,"ITypeInfo2::GetFuncCustData dispinterface method")]
+ // FIXME: if the custom strings were identical, midl would de-duplicate them; widl writes them twice.
+ void test_method([in,custom(CUSTDATA_STRLIT,"ITypeInfo2::GetParamCustData test_dispatch::test_method(x)")] int x);
+ }
}
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 2891e75689..66b9f7f25a 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -4909,11 +4909,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}
},
@@ -5551,11 +5553,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},
@@ -5572,6 +5576,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}
},
@@ -5584,6 +5589,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}
},
@@ -5596,6 +5602,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}
@@ -5610,6 +5617,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},
@@ -5628,6 +5636,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},
@@ -5650,6 +5659,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},
@@ -5678,6 +5688,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}
},
@@ -5690,6 +5701,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}
},
@@ -5702,6 +5714,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}
},
@@ -5714,6 +5727,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}
},
@@ -5726,6 +5740,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}
},
@@ -5738,6 +5753,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}
},
@@ -5750,6 +5766,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}
@@ -5768,6 +5785,7 @@ 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,
@@ -5929,6 +5947,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}
@@ -5943,6 +5962,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},
@@ -5961,6 +5981,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},
@@ -5983,6 +6004,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},
@@ -6102,6 +6124,152 @@ static const type_info info[] = {
},
},
{ /* vars */ },
+},
+{
+ "custdata_interface",
+ "{786ee4ff-c5dd-4bf4-9578-0d22fb5369cc}",
+ /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(custdata_interface*), /*size*/ sizeof(custdata_interface*),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, /*#var*/ 0,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData interface" } } },
+ },
+ { /* 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*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetFuncCustData custdata_interface::test_method" } } },
+ },
+ { /* params */
+ {VT_INT, -1, PARAMFLAG_FIN, /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetParamCustData custdata_interface::test_method(x)" } } },
+ } },
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_method",
+ "x",
+ NULL,
+ },
+ },
+ },
+ { /* vars */ },
+},
+{
+ "custdata_enum",
+ "{6ca99f5e-c86a-42ad-a5ee-5bd4c8e5553c}",
+ /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 2,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData enum" } } },
+ },
+ { /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "One", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 0 } } },
+ /*#custdata*/ 0, {},
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0x40000001, /*name*/ "Two", /*flags*/ 0, /*kind*/ VAR_CONST,
+ { .varValue = { VT_I4, { .value_int = 1 } } },
+ /*#custdata*/ 0, {},
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
+},
+{
+ "custdata_struct",
+ "{62fabe17-f733-4b09-b859-3f455dcda450}",
+ /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(struct custdata_struct), /*size*/ sizeof(struct custdata_struct),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData struct" } } },
+ },
+ { /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "test_field", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData struct" } } },
+ },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
+},
+{
+ "custdata_union",
+ "{00000000-0000-0000-0000-000000000000}",
+ /*kind*/ TKIND_UNION, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(union custdata_union), /*size*/ sizeof(union custdata_union),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 1,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData union" } } },
+ },
+ { /* funcs */ },
+ { /* vars */
+ {
+ /*id*/ 0x40000000, /*name*/ "test_field", /*flags*/ 0, /*kind*/ VAR_PERINSTANCE,
+ { .oInst = 0 },
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData union" } } },
+ },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
+},
+{
+ "custdata_typedef",
+ "{d58744d6-63f9-467c-87e5-c95158098b18}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ TYPE_ALIGNMENT(custdata_typedef), /*size*/ sizeof(custdata_typedef),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0, /*#var*/ 0,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData typedef" } } },
+ },
+ { /* funcs */ },
+ { /* vars */ },
+},
+{
+ "custdata_dispatch",
+ "{bffc216e-2159-465a-80df-b85fd4f4f122}",
+ /*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ TYPE_ALIGNMENT(custdata_dispatch*), /*size*/ sizeof(custdata_dispatch*),
+ /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 1, /*#var*/ 1,
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetCustData dispinterface" } } },
+ },
+ { /* funcs */
+ {
+ /*id*/ 0x1, /*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*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetFuncCustData dispinterface method" } } },
+ },
+ { /* params */
+ {VT_INT, -1, PARAMFLAG_FIN, /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetParamCustData test_dispatch::test_method(x)" } } },
+ } },
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_method",
+ "x",
+ NULL,
+ },
+ },
+ },
+ { /* vars */
+ {
+ /*id*/ 0x0, /*name*/ "test_property", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
+ { /* DUMMYUNIONNAME unused*/ },
+ /*#custdata*/ 1, {
+ { "{c8768723-e6d2-4442-b039-92e9c82429c4}", { VT_BSTR, { .value_str = "ITypeInfo2::GetVarCustData dispinterface property" } } },
+ },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
}
};
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 6dbd8c39b2..99181e206e 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -2600,6 +2600,9 @@ static void MSFT_DoVars(TLBContext *pcx, ITypeInfoImpl *pTI, int cFuncs,
if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpString))
ptvd->HelpString = MSFT_ReadString(pcx, pVarRec->HelpString);
+ if (reclength > FIELD_OFFSET(MSFT_VarRecord, oCustData))
+ MSFT_CustData(pcx, pVarRec->oCustData, &ptvd->custdata_list);
+
if(reclength > FIELD_OFFSET(MSFT_VarRecord, HelpStringContext))
ptvd->HelpStringContext = pVarRec->HelpStringContext;
2
1
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
dlls/combase/combase.c | 20 ++++++++++++++++++++
dlls/combase/combase.spec | 2 +-
dlls/ole32/compobj.c | 33 ---------------------------------
dlls/ole32/ole32.spec | 2 +-
4 files changed, 22 insertions(+), 35 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c
index e63cce00dda..7f1d6a63201 100644
--- a/dlls/combase/combase.c
+++ b/dlls/combase/combase.c
@@ -567,3 +567,23 @@ HRESULT WINAPI CoImpersonateClient(void)
return hr;
}
+
+/***********************************************************************
+ * CoRevertToSelf (combase.@)
+ */
+HRESULT WINAPI CoRevertToSelf(void)
+{
+ IServerSecurity *server_security;
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = CoGetCallContext(&IID_IServerSecurity, (void **)&server_security);
+ if (SUCCEEDED(hr))
+ {
+ hr = IServerSecurity_RevertToSelf(server_security);
+ IServerSecurity_Release(server_security);
+ }
+
+ return hr;
+}
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
index 3122588d7e3..83a3d32aa65 100644
--- a/dlls/combase/combase.spec
+++ b/dlls/combase/combase.spec
@@ -149,7 +149,7 @@
@ stdcall CoReleaseServerProcess() ole32.CoReleaseServerProcess
@ stdcall CoResumeClassObjects() ole32.CoResumeClassObjects
@ stub CoRetireServer
-@ stdcall CoRevertToSelf() ole32.CoRevertToSelf
+@ stdcall CoRevertToSelf()
@ stdcall CoRevokeClassObject(long) ole32.CoRevokeClassObject
@ stdcall CoRevokeInitializeSpy(int64) ole32.CoRevokeInitializeSpy
@ stdcall CoRevokeMallocSpy()
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index 507cc451e20..06dd4aefc72 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -4250,39 +4250,6 @@ HRESULT WINAPI CoSwitchCallContext(IUnknown *pObject, IUnknown **ppOldObject)
return S_OK;
}
-/***********************************************************************
- * CoRevertToSelf [OLE32.@]
- *
- * Ends the impersonation of the client of the currently executing server
- * call in the current thread.
- *
- * PARAMS
- * None.
- *
- * RETURNS
- * Success: S_OK.
- * Failure: HRESULT code.
- *
- * SEE ALSO
- * CoImpersonateClient, CoQueryClientBlanket, CoGetCallContext.
- */
-HRESULT WINAPI CoRevertToSelf(void)
-{
- IServerSecurity *pSrvSec;
- HRESULT hr;
-
- TRACE("\n");
-
- hr = CoGetCallContext(&IID_IServerSecurity, (void **)&pSrvSec);
- if (SUCCEEDED(hr))
- {
- hr = IServerSecurity_RevertToSelf(pSrvSec);
- IServerSecurity_Release(pSrvSec);
- }
-
- return hr;
-}
-
static BOOL COM_PeekMessage(struct apartment *apt, MSG *msg)
{
/* first try to retrieve messages for incoming COM calls to the apartment window */
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index 049dd0ad616..e23c57b4041 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -75,7 +75,7 @@
@ stdcall CoReleaseMarshalData(ptr)
@ stdcall CoReleaseServerProcess()
@ stdcall CoResumeClassObjects()
-@ stdcall CoRevertToSelf()
+@ stdcall CoRevertToSelf() combase.CoRevertToSelf
@ stdcall CoRevokeClassObject(long)
@ stdcall CoRevokeInitializeSpy(int64)
@ stdcall CoRevokeMallocSpy() combase.CoRevokeMallocSpy
--
2.28.0
3
14
Aug. 7, 2020
A [retval] parameter overwrites any return type, not just HRESULT.
But HRESULT is special even without a [retval] to replace it;
it's translated into pExcepInfo and so the return type becomes void.
[lcid] parameters are supplied from IDispatch::Invoke's parameters,
rather than via DISPPARAMS::rgvargs[] and should also be removed
from the FUNC_DISPATCH translation.
This rewriting should occur only for functions not originally
defined as FUNC_DISPACH (e.g. inherited or [dual]).
A FUNCDESC originally declared as a dispinterface is left as-is,
and might e.g. return HRESULT.
When GetFuncDesc removes parameters in this fashion,
GetNames must also omit their names to match cParams.
FUNC_DISPATCH from dispinterface should have oVft == 0
(a dispinterface has no vtbl beyond IDispatch itself)
Add examples in test_tlb which exercise FUNCDESC rewriting in:
1. dispinterface FUNC_DISPATCH declarations
2. dual interface
3. dispinterface which implements another interface
Signed-off-by: Kevin Puetz <PuetzKevinA(a)JohnDeere.com>
---
dlls/oleaut32/tests/test_tlb.idl | 36 ++
dlls/oleaut32/tests/typelib.c | 653 +++++++++++++++++++++++++++++++
dlls/oleaut32/typelib.c | 96 +++--
3 files changed, 757 insertions(+), 28 deletions(-)
diff --git a/dlls/oleaut32/tests/test_tlb.idl b/dlls/oleaut32/tests/test_tlb.idl
index ad35af40c3..b8fecc9a01 100644
--- a/dlls/oleaut32/tests/test_tlb.idl
+++ b/dlls/oleaut32/tests/test_tlb.idl
@@ -134,4 +134,40 @@ library Test
HRESULT test5(e value);
HRESULT test6(f value);
}
+
+ [uuid(2d4430d5-99ea-4645-85f0-c5814b72804b)]
+ dispinterface ITestDispatch
+ {
+ properties:
+ [id(10)] int property_int;
+ [id(11)] HRESULT property_HRESULT;
+
+ methods:
+ [id(1)] void test_void();
+ [id(2)] void test_void_retval([out,retval] double* ret);
+ [id(3)] HRESULT test_HRESULT();
+ [id(4)] HRESULT test_HRESULT_retval([out,retval] double* ret);
+ [id(5)] int test_int();
+ [id(6)] int test_int_retval([out,retval] double* ret);
+ [id(7)] double parse_lcid([in] BSTR x, [lcid] long lcid);
+
+ }
+
+ [uuid(79ca07f9-ac22-44ac-9aaf-811f45412293), dual]
+ interface ITestDispDual : IDispatch
+ {
+ [id(1)] void test_void();
+ [id(2)] void test_void_retval([out,retval] double* ret);
+ [id(3)] HRESULT test_HRESULT();
+ [id(4)] HRESULT test_HRESULT_retval([out,retval] double* ret);
+ [id(5)] int test_int();
+ [id(6)] int test_int_retval([out,retval] double* ret);
+ [id(7)] HRESULT parse_lcid([in] BSTR x, [lcid] long lcid, [out,retval] double *ret);
+ }
+
+ [uuid(cdb105e3-24fb-4ae6-b826-801b7b2a0a07)]
+ dispinterface ITestDispInherit
+ {
+ interface ITestDispDual;
+ }
}
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 2f23949c7d..d4b573eb7a 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -5277,6 +5277,659 @@ static const type_info info[] = {
},
},
{ /* vars */ },
+},
+{
+ "ITestDispatch",
+ "{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,
+ { /* 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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void_retval",
+ "ret",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT_retval",
+ "ret",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int_retval",
+ "ret",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_BSTR, -1, PARAMFLAG_FIN},
+ {VT_I4, -1, PARAMFLAG_FLCID},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "parse_lcid",
+ "x",
+ "lcid",
+ NULL,
+ },
+ },
+ },
+ { /* vars */
+ {
+ /*id*/ 0xa, /*name*/ "property_int", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
+ { /* DUMMYUNIONNAME unused*/ },
+ {VT_INT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ {
+ /*id*/ 0xb, /*name*/ "property_HRESULT", /*flags*/ 0, /*kind*/ VAR_DISPATCH,
+ { /* DUMMYUNIONNAME unused*/ },
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ },
+ },
+},
+{
+ "ITestDispDual",
+ "{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,
+ { /* 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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "QueryInterface",
+ "riid",
+ "ppvObj",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "AddRef",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "Release",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "GetTypeInfoCount",
+ "pctinfo",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_UINT, -1, PARAMFLAG_FIN},
+ {VT_UI4, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "GetTypeInfo",
+ "itinfo",
+ "lcid",
+ "pptinfo",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_UINT, -1, PARAMFLAG_FIN},
+ {VT_UI4, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "GetIDsOfNames",
+ "riid",
+ "rgszNames",
+ "cNames",
+ "lcid",
+ "rgdispid",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_I4, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_UI4, -1, PARAMFLAG_FIN},
+ {VT_UI2, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "Invoke",
+ "dispidMember",
+ "riid",
+ "lcid",
+ "wFlags",
+ "pdispparams",
+ "pvarResult",
+ "pexcepinfo",
+ "puArgErr",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void_retval",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT_retval",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int_retval",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_BSTR, -1, PARAMFLAG_FIN},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "parse_lcid",
+ "x",
+ NULL,
+ },
+ },
+ },
+ { /* vars */ },
+},
+{
+ "ITestDispDual",
+ "{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,
+ { /* 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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void_retval",
+ "ret",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT_retval",
+ "ret",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int_retval",
+ "ret",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_BSTR, -1, PARAMFLAG_FIN},
+ {VT_I4, -1, PARAMFLAG_FLCID},
+ {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "parse_lcid",
+ "x",
+ "lcid",
+ "ret",
+ NULL,
+ },
+ },
+ },
+ { /* vars */ },
+},
+{
+ "ITestDispInherit",
+ "{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,
+ { /* 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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "QueryInterface",
+ "riid",
+ "ppvObj",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "AddRef",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "Release",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "GetTypeInfoCount",
+ "pctinfo",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_UINT, -1, PARAMFLAG_FIN},
+ {VT_UI4, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "GetTypeInfo",
+ "itinfo",
+ "lcid",
+ "pptinfo",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_UINT, -1, PARAMFLAG_FIN},
+ {VT_UI4, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "GetIDsOfNames",
+ "riid",
+ "rgszNames",
+ "cNames",
+ "lcid",
+ "rgdispid",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_I4, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_UI4, -1, PARAMFLAG_FIN},
+ {VT_UI2, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FIN},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {VT_PTR, -1, PARAMFLAG_FOUT},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "Invoke",
+ "dispidMember",
+ "riid",
+ "lcid",
+ "wFlags",
+ "pdispparams",
+ "pvarResult",
+ "pexcepinfo",
+ "puArgErr",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_void_retval",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_HRESULT_retval",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test_int_retval",
+ NULL,
+ },
+ },
+ {
+ /*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 */
+ { /* params */
+ {VT_BSTR, -1, PARAMFLAG_FIN},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "parse_lcid",
+ "x",
+ NULL,
+ },
+ },
+ },
+ { /* vars */ },
}
};
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 06667850a3..2f7ce53b1c 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -2465,7 +2465,11 @@ MSFT_DoFuncs(TLBContext* pcx,
ptfd->funcdesc.callconv = (pFuncRec->FKCCIC) >> 8 & 0xF;
ptfd->funcdesc.cParams = pFuncRec->nrargs ;
ptfd->funcdesc.cParamsOpt = pFuncRec->nroargs ;
- ptfd->funcdesc.oVft = (pFuncRec->VtableOffset & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size;
+ if(ptfd->funcdesc.funckind == FUNC_DISPATCH) {
+ ptfd->funcdesc.oVft = 0;
+ } else {
+ ptfd->funcdesc.oVft = (pFuncRec->VtableOffset & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size;
+ }
ptfd->funcdesc.wFuncFlags = LOWORD(pFuncRec->Flags) ;
/* nameoffset is sometimes -1 on the second half of a propget/propput
@@ -4179,7 +4183,11 @@ static void SLTG_DoFuncs(char *pBlk, char *pFirstItem, ITypeInfoImpl *pTI,
pFuncDesc->funcdesc.callconv = pFunc->nacc & 0x7;
pFuncDesc->funcdesc.cParams = pFunc->nacc >> 3;
pFuncDesc->funcdesc.cParamsOpt = (pFunc->retnextopt & 0x7e) >> 1;
- pFuncDesc->funcdesc.oVft = (pFunc->vtblpos & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size;
+ if (pFuncDesc->funcdesc.funckind == FUNC_DISPATCH) {
+ pFuncDesc->funcdesc.oVft = 0;
+ } else {
+ pFuncDesc->funcdesc.oVft = (pFunc->vtblpos & ~1) * sizeof(void *) / pTI->pTypeLib->ptr_size;
+ }
if(pFunc->magic & SLTG_FUNCTION_FLAGS_PRESENT)
pFuncDesc->funcdesc.wFuncFlags = pFunc->funcflags;
@@ -5849,11 +5857,13 @@ static HRESULT TLB_AllocAndInitFuncDesc( const FUNCDESC *src, FUNCDESC **dest_pt
} else
dest->lprgelemdescParam = NULL;
- /* special treatment for dispinterfaces: this makes functions appear
- * to return their [retval] value when it is really returning an
- * HRESULT */
- if (dispinterface && dest->elemdescFunc.tdesc.vt == VT_HRESULT)
+ /* special treatment for dispinterface FUNCDESC based on an interface FUNCDESC.
+ * This accounts for several arguments that are seperate in the signature of
+ * IDispatch::Invoke, rather than passed in DISPPARAMS::rgvarg[] */
+ if (dispinterface && (src->funckind != FUNC_DISPATCH))
{
+ /* functions that have a [retval] parameter return this value into pVarResult.
+ * [retval] is always the last parameter (if present) */
if (dest->cParams &&
(dest->lprgelemdescParam[dest->cParams - 1].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL))
{
@@ -5866,19 +5876,28 @@ static HRESULT TLB_AllocAndInitFuncDesc( const FUNCDESC *src, FUNCDESC **dest_pt
return E_UNEXPECTED;
}
- /* copy last parameter to the return value. we are using a flat
- * buffer so there is no danger of leaking memory in
- * elemdescFunc */
+ /* the type pointed to by this [retval] becomes elemdescFunc,
+ * i.e. functions signature's return type (replacing HRESULT/void/anything else)
+ * We are using a flat buffer so there is no danger of leaking memory */
dest->elemdescFunc.tdesc = *elemdesc->tdesc.u.lptdesc;
/* remove the last parameter */
dest->cParams--;
}
- else
- /* otherwise this function is made to appear to have no return
- * value */
+ else if (dest->elemdescFunc.tdesc.vt == VT_HRESULT)
+ /* Even if not otherwise replaced (by [retval],
+ * HRESULT is returned in pExcepInfo->scode, not pVarResult.
+ * So the function signature should show no return value. */
dest->elemdescFunc.tdesc.vt = VT_VOID;
+ /* The now-last (except [retval], removed above) parameter might be labeled [lcid].
+ * If so it will be supplied from Invoke(lcid), so also not via DISPPARAMS::rgvarg */
+ if (dest->cParams &&
+ (dest->lprgelemdescParam[dest->cParams - 1].u.paramdesc.wParamFlags & PARAMFLAG_FLCID))
+ {
+ /* remove the last parameter */
+ dest->cParams--;
+ }
}
*dest_ptr = dest;
@@ -6105,36 +6124,38 @@ static HRESULT WINAPI ITypeInfo_fnGetVarDesc( ITypeInfo2 *iface, UINT index,
return TLB_AllocAndInitVarDesc(&pVDesc->vardesc, ppVarDesc);
}
-/* ITypeInfo_GetNames
- *
- * Retrieves the variable with the specified member ID (or the name of the
- * property or method and its parameters) that correspond to the specified
- * function ID.
- */
-static HRESULT WINAPI ITypeInfo_fnGetNames( ITypeInfo2 *iface, MEMBERID memid,
- BSTR *rgBstrNames, UINT cMaxNames, UINT *pcNames)
+/* internal function to make the inherited interfaces' methods appear
+ * part of the interface, remembering if the top-level was dispinterface */
+static HRESULT ITypeInfoImpl_GetNames( ITypeInfo *iface,
+ MEMBERID memid, BSTR *rgBstrNames, UINT cMaxNames, UINT *pcNames,
+ BOOL dispinterface)
{
- ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);
+ ITypeInfoImpl *This = impl_from_ITypeInfo(iface);
const TLBFuncDesc *pFDesc;
const TLBVarDesc *pVDesc;
int i;
- TRACE("(%p) memid=0x%08x Maxname=%d\n", This, memid, cMaxNames);
-
- if(!rgBstrNames)
- return E_INVALIDARG;
*pcNames = 0;
pFDesc = TLB_get_funcdesc_by_memberid(This, memid);
if(pFDesc)
{
+ UINT cParams = pFDesc->funcdesc.cParams;
if(!cMaxNames || !pFDesc->Name)
return S_OK;
*rgBstrNames = SysAllocString(TLB_get_bstr(pFDesc->Name));
++(*pcNames);
- for(i = 0; i < pFDesc->funcdesc.cParams; ++i){
+ if(dispinterface && (pFDesc->funcdesc.funckind != FUNC_DISPATCH)) {
+ /* match the rewriting of special trailing parameters in TLB_AllocAndInitFuncDesc; */
+ if ((cParams > 0) && (pFDesc->funcdesc.lprgelemdescParam[cParams - 1].u.paramdesc.wParamFlags & PARAMFLAG_FRETVAL))
+ --cParams; /* Invoke(pVarResult) supplies the [retval] parameter, so its hidden from DISPPARAMS*/
+ if ((cParams > 0) && (pFDesc->funcdesc.lprgelemdescParam[cParams - 1].u.paramdesc.wParamFlags & PARAMFLAG_FLCID))
+ --cParams; /* Invoke(lcid) supplies the [lcid] parameter, so its hidden from DISPPARAMS */
+ }
+
+ for(i = 0; i < cParams; ++i) {
if(*pcNames >= cMaxNames || !pFDesc->pParamDesc[i].Name)
return S_OK;
rgBstrNames[*pcNames] = SysAllocString(TLB_get_bstr(pFDesc->pParamDesc[i].Name));
@@ -6156,10 +6177,10 @@ static HRESULT WINAPI ITypeInfo_fnGetNames( ITypeInfo2 *iface, MEMBERID memid,
/* recursive search */
ITypeInfo *pTInfo;
HRESULT result;
- result = ITypeInfo2_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo);
+ result = ITypeInfo_GetRefTypeInfo(iface, This->impltypes[0].hRef, &pTInfo);
if(SUCCEEDED(result))
{
- result=ITypeInfo_GetNames(pTInfo, memid, rgBstrNames, cMaxNames, pcNames);
+ result=ITypeInfoImpl_GetNames(pTInfo, memid, rgBstrNames, cMaxNames, pcNames, dispinterface);
ITypeInfo_Release(pTInfo);
return result;
}
@@ -6175,6 +6196,25 @@ static HRESULT WINAPI ITypeInfo_fnGetNames( ITypeInfo2 *iface, MEMBERID memid,
return S_OK;
}
+/* ITypeInfo_GetNames
+ *
+ * Retrieves the variable with the specified member ID (or the name of the
+ * property or method and its parameters) that correspond to the specified
+ * function ID.
+ */
+static HRESULT WINAPI ITypeInfo_fnGetNames( ITypeInfo2 *iface, MEMBERID memid,
+ BSTR *rgBstrNames, UINT cMaxNames, UINT *pcNames)
+{
+ ITypeInfoImpl *This = impl_from_ITypeInfo2(iface);
+ TRACE("(%p) memid=0x%08x Maxname=%d\n", This, memid, cMaxNames);
+
+ if(!rgBstrNames)
+ return E_INVALIDARG;
+
+ return ITypeInfoImpl_GetNames((ITypeInfo *)iface,
+ memid, rgBstrNames, cMaxNames, pcNames,
+ This->typeattr.typekind == TKIND_DISPATCH);
+}
/* ITypeInfo::GetRefTypeOfImplType
*
2
1