From 8439ccf4acca9a4ef64b3e9b6fe19fcaa3a6d0a9 Mon Sep 17 00:00:00 2001 From: Zdenek Zambersky Date: Wed, 2 Apr 2025 00:14:22 +0200 Subject: [PATCH] [GEN][ZH] COM related fixes for MinGW --- .../Libraries/Source/EABrowserDispatch/BrowserDispatch.idl | 2 +- Core/Libraries/Source/EABrowserEngine/BrowserEngine.idl | 3 +++ Dependencies/Utility/Utility/CppMacros.h | 7 +++++++ .../GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h | 6 +++--- Generals/Code/GameEngine/Source/Common/GameEngine.cpp | 2 +- .../Source/GameNetwork/WOLBrowser/WebBrowser.cpp | 6 +++--- .../Source/W3DDevice/GameClient/W3DWebBrowser.cpp | 4 ++++ .../GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h | 6 +++--- GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp | 2 +- .../Source/GameNetwork/WOLBrowser/WebBrowser.cpp | 6 +++--- .../Source/W3DDevice/GameClient/W3DWebBrowser.cpp | 4 ++++ 11 files changed, 33 insertions(+), 15 deletions(-) diff --git a/Core/Libraries/Source/EABrowserDispatch/BrowserDispatch.idl b/Core/Libraries/Source/EABrowserDispatch/BrowserDispatch.idl index a18c72cb69..73f9d29efa 100644 --- a/Core/Libraries/Source/EABrowserDispatch/BrowserDispatch.idl +++ b/Core/Libraries/Source/EABrowserDispatch/BrowserDispatch.idl @@ -25,6 +25,6 @@ library BROWSERDISPATCHLib ] interface IBrowserDispatch : IUnknown { - [id(1), helpstring("method TestMethod")] HRESULT TestMethod(Int num1); + [id(1), helpstring("method TestMethod")] HRESULT TestMethod(int num1); }; }; diff --git a/Core/Libraries/Source/EABrowserEngine/BrowserEngine.idl b/Core/Libraries/Source/EABrowserEngine/BrowserEngine.idl index 312a07d03c..46797b606c 100644 --- a/Core/Libraries/Source/EABrowserEngine/BrowserEngine.idl +++ b/Core/Libraries/Source/EABrowserEngine/BrowserEngine.idl @@ -2,6 +2,9 @@ // // typelib filename: +// NOTE: Import of oaidl.idl has been added to fix compilation error with widl: +// BrowserEngine.idl:31:44: error: type 'IDispatch' not found in global namespace +import "oaidl.idl"; [ uuid(6EE45698-21BA-420D-AD40-1B547699BEFB), version(1.0) diff --git a/Dependencies/Utility/Utility/CppMacros.h b/Dependencies/Utility/Utility/CppMacros.h index a3f2531ac5..3d83dda8c5 100644 --- a/Dependencies/Utility/Utility/CppMacros.h +++ b/Dependencies/Utility/Utility/CppMacros.h @@ -25,6 +25,13 @@ #define NOEXCEPT_17 #endif +// noexcept for methods of IUNKNOWN interface +#if defined(_MSC_VER) +#define IUNKNOWN_NOEXCEPT NOEXCEPT_17 +#else +#define IUNKNOWN_NOEXCEPT +#endif + #if __cplusplus >= 201103L #define CPP_11(code) code #else diff --git a/Generals/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h b/Generals/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h index 66333e93aa..7c98c1fc95 100644 --- a/Generals/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h +++ b/Generals/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h @@ -113,9 +113,9 @@ class WebBrowser : // IUnknown methods //--------------------------------------------------------------------------- protected: - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) NOEXCEPT_17; - ULONG STDMETHODCALLTYPE AddRef(void) NOEXCEPT_17; - ULONG STDMETHODCALLTYPE Release(void) NOEXCEPT_17; + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) IUNKNOWN_NOEXCEPT; + ULONG STDMETHODCALLTYPE AddRef(void) IUNKNOWN_NOEXCEPT; + ULONG STDMETHODCALLTYPE Release(void) IUNKNOWN_NOEXCEPT; //--------------------------------------------------------------------------- // IBrowserDispatch methods diff --git a/Generals/Code/GameEngine/Source/Common/GameEngine.cpp b/Generals/Code/GameEngine/Source/Common/GameEngine.cpp index f65433acef..f6f5f79063 100644 --- a/Generals/Code/GameEngine/Source/Common/GameEngine.cpp +++ b/Generals/Code/GameEngine/Source/Common/GameEngine.cpp @@ -192,7 +192,7 @@ GameEngine::GameEngine( void ) m_quitting = FALSE; m_isActive = FALSE; - _Module.Init(NULL, ApplicationHInstance); + _Module.Init(NULL, ApplicationHInstance, NULL); } //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp b/Generals/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp index 3837d80396..9bf879ec21 100644 --- a/Generals/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp +++ b/Generals/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp @@ -237,7 +237,7 @@ WebBrowserURL * WebBrowser::makeNewURL(AsciiString tag) * ******************************************************************************/ -STDMETHODIMP WebBrowser::QueryInterface(REFIID iid, void** ppv) NOEXCEPT_17 +STDMETHODIMP WebBrowser::QueryInterface(REFIID iid, void** ppv) IUNKNOWN_NOEXCEPT { *ppv = NULL; @@ -270,7 +270,7 @@ STDMETHODIMP WebBrowser::QueryInterface(REFIID iid, void** ppv) NOEXCEPT_17 * ******************************************************************************/ -ULONG STDMETHODCALLTYPE WebBrowser::AddRef(void) NOEXCEPT_17 +ULONG STDMETHODCALLTYPE WebBrowser::AddRef(void) IUNKNOWN_NOEXCEPT { return ++mRefCount; } @@ -290,7 +290,7 @@ ULONG STDMETHODCALLTYPE WebBrowser::AddRef(void) NOEXCEPT_17 * ******************************************************************************/ -ULONG STDMETHODCALLTYPE WebBrowser::Release(void) NOEXCEPT_17 +ULONG STDMETHODCALLTYPE WebBrowser::Release(void) IUNKNOWN_NOEXCEPT { DEBUG_ASSERTCRASH(mRefCount > 0, ("Negative reference count")); --mRefCount; diff --git a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp index 08b3a7c5bd..24934f9d22 100644 --- a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp +++ b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp @@ -57,7 +57,11 @@ Bool W3DWebBrowser::createBrowserWindow(const char *tag, GameWindow *win) return FALSE; } +#ifdef __GNUC__ + CComQIIDPtr idisp(m_dispatch); +#else CComQIPtr idisp(m_dispatch); +#endif if (m_dispatch == NULL) { return FALSE; diff --git a/GeneralsMD/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h b/GeneralsMD/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h index 5e5bff6e5c..075df2e479 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h +++ b/GeneralsMD/Code/GameEngine/Include/GameNetwork/WOLBrowser/WebBrowser.h @@ -113,9 +113,9 @@ class WebBrowser : // IUnknown methods //--------------------------------------------------------------------------- protected: - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) NOEXCEPT_17; - ULONG STDMETHODCALLTYPE AddRef(void) NOEXCEPT_17; - ULONG STDMETHODCALLTYPE Release(void) NOEXCEPT_17; + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject) IUNKNOWN_NOEXCEPT; + ULONG STDMETHODCALLTYPE AddRef(void) IUNKNOWN_NOEXCEPT; + ULONG STDMETHODCALLTYPE Release(void) IUNKNOWN_NOEXCEPT; //--------------------------------------------------------------------------- // IBrowserDispatch methods diff --git a/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp b/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp index f31ea220cd..afd0e0c42a 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GameEngine.cpp @@ -190,7 +190,7 @@ GameEngine::GameEngine( void ) m_quitting = FALSE; m_isActive = FALSE; - _Module.Init(NULL, ApplicationHInstance); + _Module.Init(NULL, ApplicationHInstance, NULL); } //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp index 4989e40480..40db96ca70 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/WOLBrowser/WebBrowser.cpp @@ -237,7 +237,7 @@ WebBrowserURL * WebBrowser::makeNewURL(AsciiString tag) * ******************************************************************************/ -STDMETHODIMP WebBrowser::QueryInterface(REFIID iid, void** ppv) NOEXCEPT_17 +STDMETHODIMP WebBrowser::QueryInterface(REFIID iid, void** ppv) IUNKNOWN_NOEXCEPT { *ppv = NULL; @@ -270,7 +270,7 @@ STDMETHODIMP WebBrowser::QueryInterface(REFIID iid, void** ppv) NOEXCEPT_17 * ******************************************************************************/ -ULONG STDMETHODCALLTYPE WebBrowser::AddRef(void) NOEXCEPT_17 +ULONG STDMETHODCALLTYPE WebBrowser::AddRef(void) IUNKNOWN_NOEXCEPT { return ++mRefCount; } @@ -290,7 +290,7 @@ ULONG STDMETHODCALLTYPE WebBrowser::AddRef(void) NOEXCEPT_17 * ******************************************************************************/ -ULONG STDMETHODCALLTYPE WebBrowser::Release(void) NOEXCEPT_17 +ULONG STDMETHODCALLTYPE WebBrowser::Release(void) IUNKNOWN_NOEXCEPT { DEBUG_ASSERTCRASH(mRefCount > 0, ("Negative reference count")); --mRefCount; diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp index 3b6631e8d5..c25b70847e 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/W3DWebBrowser.cpp @@ -57,7 +57,11 @@ Bool W3DWebBrowser::createBrowserWindow(const char *tag, GameWindow *win) return FALSE; } +#ifdef __GNUC__ + CComQIIDPtr idisp(m_dispatch); +#else CComQIPtr idisp(m_dispatch); +#endif if (m_dispatch == NULL) { return FALSE;