Hi On Tue, Dec 16, 2025 at 8:26 AM Marc-André Lureau < [email protected]> wrote:
> Hi > > On Mon, Dec 15, 2025 at 8:57 PM <[email protected]> wrote: > >> From: Nguyen Dinh Phi <[email protected]> >> >> Newer versions of MinGW-w64 provide ConvertStringToBSTR() in the >> _com_util namespace via <comutil.h>. This causes a redefinition >> error when building qemu-ga on Windows with these toolchains. >> >> Add a meson check to detect whether ConvertStringToBSTR is already >> available, and conditionally compile our fallback implementation >> only when the system does not provide one. >> >> Signed-off-by: Nguyen Dinh Phi <[email protected]> >> --- >> meson.build | 12 ++++++++++++ >> qga/vss-win32/install.cpp | 2 ++ >> 2 files changed, 14 insertions(+) >> >> diff --git a/meson.build b/meson.build >> index c5710a6a47..60a980e610 100644 >> --- a/meson.build >> +++ b/meson.build >> @@ -3299,6 +3299,18 @@ endif >> # Detect host pointer size for the target configuration loop. >> host_long_bits = cc.sizeof('void *') * 8 >> >> +# Detect if ConvertStringToBSTR has been defined in _com_util namespace >> +if host_os == 'windows' >> + has_convert_string_to_bstr = cxx.compiles(''' >> + #include <comutil.h> >> + int main() { >> + BSTR b = _com_util::ConvertStringToBSTR("test"); >> + return b ? 0 : 1; >> + } >> + ''') >> + config_host_data.set('CONFIG_CONVERT_STRING_TO_BSTR', >> has_convert_string_to_bstr) >> +endif >> + >> ######################## >> # Target configuration # >> ######################## >> diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp >> index 7b25d9098b..5b7a8e9bc5 100644 >> --- a/qga/vss-win32/install.cpp >> +++ b/qga/vss-win32/install.cpp >> @@ -549,6 +549,7 @@ STDAPI DllUnregisterServer(void) >> >> >> /* Support function to convert ASCII string into BSTR (used in _bstr_t) >> */ >> +#ifndef CONFIG_CONVERT_STRING_TO_BSTR >> > > I wonder if it could check __MINGW64_VERSION_MAJOR >= 14 instead of adding > a configure-time check. > @Peter Maydell <[email protected]> preferred to avoid specific version-number checks. See: https://gitlab.com/qemu-project/qemu/-/issues/3217#note_2935451782 I also preferred the idea of checking the real function present instead of the version of the component. Reviewed-by: Kostiantyn Kostiuk <[email protected]> > > lgtm anyway > Reviewed-by: Marc-André Lureau <[email protected]> > > namespace _com_util >> { >> BSTR WINAPI ConvertStringToBSTR(const char *ascii) { >> @@ -566,6 +567,7 @@ namespace _com_util >> return bstr; >> } >> } >> +#endif >> >> /* Stop QGA VSS provider service using Winsvc API */ >> STDAPI StopService(void) >> -- >> 2.43.0 >> >>
