[PATCH 1/5] widl: Generate WinRT runtimeclass name constants.

Rémi Bernon rbernon at codeweavers.com
Tue Feb 2 02:22:33 CST 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---

Updating this patch with the suggested change, and adding a few more.

 tools/widl/header.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/tools/widl/header.c b/tools/widl/header.c
index 63389440c94..e6394991317 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,14 @@ 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);
+    fprintf(header, "#if defined(_MSC_VER) || defined(__MINGW32__)\n");
+    /* FIXME: MIDL generates extern const here but GCC warns if extern is initialized */
+    fprintf(header, "const DECLSPEC_SELECTANY WCHAR RuntimeClass_%s[] = L\"%s\";\n", c_name, name);
+    fprintf(header, "#else\n");
+    fprintf(header, "static const 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\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