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:
Vadim Zeitlin
2010-09-12 22:58:48 +00:00
parent 7095bd60e2
commit ba97f6f8a3

View File

@@ -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,
&params
) )