From 8caff397f683c99dfe0597a6bfe1457b66fce427 Mon Sep 17 00:00:00 2001 From: YexuanXiao Date: Sat, 21 Mar 2026 23:42:56 +0800 Subject: [PATCH] Simplify module implementation to resolve compatibility issues with mixed use of header files --- cppwinrt/code_writers.h | 29 ----------------------------- cppwinrt/component_writers.h | 6 ++++++ cppwinrt/file_writers.h | 9 --------- strings/base_macros.h | 9 +++------ 4 files changed, 9 insertions(+), 44 deletions(-) diff --git a/cppwinrt/code_writers.h b/cppwinrt/code_writers.h index 51ecc63d6..bd4e59d96 100644 --- a/cppwinrt/code_writers.h +++ b/cppwinrt/code_writers.h @@ -126,49 +126,20 @@ namespace cppwinrt } #endif - static void write_module_aware_export_macro_push(writer& w) - { - w.write(R"( -#pragma push_macro("WINRT_EXPORT") -#undef WINRT_EXPORT -)"); - } - - static void write_module_aware_export_macro_pop(writer& w) - { - w.write(R"( -#pragma pop_macro("WINRT_EXPORT") -)"); - } - static void write_module_aware_export_includes_start(writer& w) { w.write(R"( #if !defined(WINRT_MODULE) -#define WINRT_EXPORT )"); } static void write_module_aware_export_includes_end(writer& w) { w.write(R"( -#else -#define WINRT_EXPORT export #endif )"); } - [[nodiscard]] static finish_with wrap_module_aware_export_macro_guard(writer& w, bool enable_module) - { - if (enable_module) - { - write_module_aware_export_macro_push(w); - return { w, write_module_aware_export_macro_pop }; - } - - return { w, write_nothing }; - } - [[nodiscard]] static finish_with wrap_module_aware_includes_guard(writer& w, bool enable_module) { if (enable_module) diff --git a/cppwinrt/component_writers.h b/cppwinrt/component_writers.h index 7b29853a6..47cabb4a5 100644 --- a/cppwinrt/component_writers.h +++ b/cppwinrt/component_writers.h @@ -393,6 +393,12 @@ catch (...) { return winrt::to_hresult(); } return; } + w.write(R"( +#ifndef WINRT_EXPORT +#define WINRT_EXPORT +#endif +)"); + auto wrap_type = wrap_type_namespace(w, type_namespace); for (auto&&[factory_name, factory] : get_factories(w, type)) diff --git a/cppwinrt/file_writers.h b/cppwinrt/file_writers.h index 54e40a936..9e687128c 100644 --- a/cppwinrt/file_writers.h +++ b/cppwinrt/file_writers.h @@ -43,7 +43,6 @@ namespace cppwinrt w.write(strings::base_version_odr, CPPWINRT_VERSION_STRING); { auto wrap_file_guard = wrap_open_file_guard(w, "BASE"); - auto wrap_export_macro_guard = wrap_module_aware_export_macro_guard(w, settings.modules); { // In module builds, generated projection headers must be "module-aware": @@ -183,7 +182,6 @@ namespace cppwinrt if (settings.modules) { get_namespace_module_imports(c, ns, w, module_imports); - write_module_aware_export_macro_pop(w); } else { @@ -196,7 +194,6 @@ namespace cppwinrt if (settings.modules) { - write_module_aware_export_macro_push(w); write_module_aware_export_includes_start(w); } @@ -230,7 +227,6 @@ namespace cppwinrt if (settings.modules) { get_namespace_module_imports(c, ns, w, module_imports); - write_module_aware_export_macro_pop(w); } else { @@ -244,7 +240,6 @@ namespace cppwinrt if (settings.modules) { - write_module_aware_export_macro_push(w); write_module_aware_export_includes_start(w); } @@ -282,7 +277,6 @@ namespace cppwinrt if (settings.modules) { get_namespace_module_imports(c, ns, w, module_imports); - write_module_aware_export_macro_pop(w); } else { @@ -298,7 +292,6 @@ namespace cppwinrt if (settings.modules) { - write_module_aware_export_macro_push(w); write_module_aware_export_includes_start(w); } @@ -658,7 +651,6 @@ export import winrt.base; if (settings.modules) { get_namespace_module_imports(c, ns, w, module_imports); - write_module_aware_export_macro_pop(w); } else { @@ -671,7 +663,6 @@ export import winrt.base; if (settings.modules) { - write_module_aware_export_macro_push(w); write_module_aware_export_includes_start(w); } diff --git a/strings/base_macros.h b/strings/base_macros.h index a6702763b..702ab96ab 100644 --- a/strings/base_macros.h +++ b/strings/base_macros.h @@ -23,15 +23,12 @@ #pragma warning(disable : 4268) #endif -// Transition: compatibility -#ifndef WINRT_MODULE - -#ifndef WINRT_EXPORT +#ifdef WINRT_MODULE +#define WINRT_EXPORT export +#else #define WINRT_EXPORT #endif -#endif - // pulls in large, hard-to-control legacy headers. In header builds we keep the // existing behavior, but in module builds it's provided by the winrt.numerics module. #ifndef WINRT_MODULE