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;
|
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()
|
// TODO: fix EnumerateLoadedModules() to use EnumerateLoadedModules64()
|
||||||
#ifdef __WIN64__
|
#ifdef __WIN64__
|
||||||
typedef DWORD64 DWORD_32_64;
|
typedef DWORD64 DWORD_32_64;
|
||||||
@@ -97,7 +87,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static BOOL CALLBACK
|
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 */
|
/* static */
|
||||||
BOOL CALLBACK
|
BOOL CALLBACK
|
||||||
wxDynamicLibraryDetailsCreator::EnumModulesProc(NameStr_t name,
|
wxDynamicLibraryDetailsCreator::EnumModulesProc(PCSTR name,
|
||||||
DWORD_32_64 base,
|
DWORD_32_64 base,
|
||||||
ULONG size,
|
ULONG size,
|
||||||
void *data)
|
void *data)
|
||||||
@@ -280,9 +270,15 @@ wxDynamicLibraryDetailsArray wxDynamicLibrary::ListLoaded()
|
|||||||
params.dlls = &dlls;
|
params.dlls = &dlls;
|
||||||
params.verDLL = &verDLL;
|
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
|
if ( !wxDbgHelpDLL::EnumerateLoadedModules
|
||||||
(
|
(
|
||||||
::GetCurrentProcess(),
|
::GetCurrentProcess(),
|
||||||
|
(PENUMLOADED_MODULES_CALLBACK)
|
||||||
wxDynamicLibraryDetailsCreator::EnumModulesProc,
|
wxDynamicLibraryDetailsCreator::EnumModulesProc,
|
||||||
¶ms
|
¶ms
|
||||||
) )
|
) )
|
||||||
|
Reference in New Issue
Block a user