From ba97f6f8a39e978f5081f86752faa18ea3af7ba4 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 12 Sep 2010 22:58:48 +0000 Subject: [PATCH] Fix compilation of EnumerateLoadedModules() call for MinGW64 4.5. Our logic for detection of whether the first argument of PENUMLOADED_MODULES_CALLBACK is const or not didn't work for MinGW64 4.5. Replace it with a less error-prone (even if more ugly) version which simply casts the callback to the type expected by the function. Closes #12465. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65535 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/dlmsw.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/msw/dlmsw.cpp b/src/msw/dlmsw.cpp index e3bde950a5..760a59629b 100644 --- a/src/msw/dlmsw.cpp +++ b/src/msw/dlmsw.cpp @@ -79,16 +79,6 @@ public: wxVersionDLL *verDLL; }; - // the declared type of the first EnumModulesProc() parameter changed in - // recent SDK versions and is no PCSTR instead of old PSTR, we know that - // it's const in version 11 and non-const in version 8 included with VC8 - // (and earlier), suppose that it's only changed in version 11 - #if defined(API_VERSION_NUMBER) && API_VERSION_NUMBER >= 11 - typedef PCSTR NameStr_t; - #else - typedef PSTR NameStr_t; - #endif - // TODO: fix EnumerateLoadedModules() to use EnumerateLoadedModules64() #ifdef __WIN64__ typedef DWORD64 DWORD_32_64; @@ -97,7 +87,7 @@ public: #endif static BOOL CALLBACK - EnumModulesProc(NameStr_t name, DWORD_32_64 base, ULONG size, void *data); + EnumModulesProc(PCSTR name, DWORD_32_64 base, ULONG size, void *data); }; // ============================================================================ @@ -184,7 +174,7 @@ wxString wxVersionDLL::GetFileVersion(const wxString& filename) const /* static */ BOOL CALLBACK -wxDynamicLibraryDetailsCreator::EnumModulesProc(NameStr_t name, +wxDynamicLibraryDetailsCreator::EnumModulesProc(PCSTR name, DWORD_32_64 base, ULONG size, void *data) @@ -280,9 +270,15 @@ wxDynamicLibraryDetailsArray wxDynamicLibrary::ListLoaded() params.dlls = &dlls; params.verDLL = &verDLL; + // Note that the cast of EnumModulesProc is needed because the type of + // PENUMLOADED_MODULES_CALLBACK changed: in old SDK versions its first + // argument was non-const PSTR while now it's PCSTR. By explicitly + // casting to whatever the currently used headers require we ensure + // that the code compilers in any case. if ( !wxDbgHelpDLL::EnumerateLoadedModules ( ::GetCurrentProcess(), + (PENUMLOADED_MODULES_CALLBACK) wxDynamicLibraryDetailsCreator::EnumModulesProc, ¶ms ) ) -- 2.47.2