[PATCH 4/4] widl: Generate WinRT runtimeclass name constants.
Rémi Bernon
rbernon at codeweavers.com
Fri Jan 29 02:50:08 CST 2021
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
Note that MIDL generates a L"" string here, I wasn't sure if we can now
use them everywhere, and generating the WCHAR array was the safest way.
tools/widl/header.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tools/widl/header.c b/tools/widl/header.c
index 63389440c94..4db244fef5d 100644
--- a/tools/widl/header.c
+++ b/tools/widl/header.c
@@ -1702,6 +1702,7 @@ static void write_runtimeclass(FILE *header, type_t *runtimeclass)
{
expr_t *contract = get_attrp(runtimeclass->attrs, ATTR_CONTRACT);
char *name, *c_name;
+ size_t i, len;
name = format_namespace(runtimeclass->namespace, "", ".", runtimeclass->name, NULL);
c_name = format_namespace(runtimeclass->namespace, "", "_", runtimeclass->name, NULL);
fprintf(header, "/*\n");
@@ -1710,6 +1711,10 @@ static void write_runtimeclass(FILE *header, type_t *runtimeclass)
if (contract) write_apicontract_guard_start(header, contract);
fprintf(header, "#ifndef RUNTIMECLASS_%s_DEFINED\n", c_name);
fprintf(header, "#define RUNTIMECLASS_%s_DEFINED\n", c_name);
+ /* FIXME: MIDL generates extern const here but GCC warns if extern is initialized */
+ fprintf(header, "/*extern*/ const DECLSPEC_SELECTANY WCHAR RuntimeClass_%s[] = {", c_name);
+ for (i = 0, len = strlen(name); i < len; ++i) fprintf(header, "'%c',", name[i]);
+ fprintf(header, "0};\n");
fprintf(header, "#endif /* RUNTIMECLASS_%s_DEFINED */\n", c_name);
free(c_name);
free(name);
--
2.30.0
More information about the wine-devel
mailing list