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
This commit is contained in:
@@ -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
|
||||
) )
|
||||
|
Reference in New Issue
Block a user