整理
This commit is contained in:
175
include/boost/winapi/dbghelp.hpp
Normal file
175
include/boost/winapi/dbghelp.hpp
Normal file
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
* Copyright 2015 Klemens Morgenstern
|
||||
* Copyright 2016 Jorge Lodos
|
||||
* Copyright 2016 Andrey Semashev
|
||||
*
|
||||
* Distributed under the Boost Software License, Version 1.0.
|
||||
* See http://www.boost.org/LICENSE_1_0.txt
|
||||
*/
|
||||
|
||||
#ifndef BOOST_WINAPI_DBGHELP_HPP_INCLUDED_
|
||||
#define BOOST_WINAPI_DBGHELP_HPP_INCLUDED_
|
||||
|
||||
#include <boost/winapi/basic_types.hpp>
|
||||
|
||||
#if defined( BOOST_USE_WINDOWS_H )
|
||||
#if !defined( BOOST_WINAPI_IS_MINGW )
|
||||
#include <dbghelp.h>
|
||||
#else
|
||||
// In MinGW there is no dbghelp.h but an older imagehlp.h header defines some of the symbols from it.
|
||||
// Note that the user has to link with libimagehlp.a instead of libdbghelp.a for it to work.
|
||||
#include <imagehlp.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#if BOOST_WINAPI_PARTITION_DESKTOP
|
||||
|
||||
#include <boost/winapi/detail/header.hpp>
|
||||
|
||||
// Some symbols declared below are not present in all versions of Windows SDK, MinGW and MinGW-w64.
|
||||
// dbghelp.h/imagehlp.h define the API_VERSION_NUMBER macro which we use to detect its version.
|
||||
// When the macro is not available we can only guess based on the compiler version or SDK type.
|
||||
#if defined(API_VERSION_NUMBER)
|
||||
#if API_VERSION_NUMBER >= 11
|
||||
// UnDecorateSymbolNameW available since Windows SDK 6.0A and MinGW-w64 (as of 2016-02-14)
|
||||
#define BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW
|
||||
#endif
|
||||
#elif defined(_MSC_VER) && _MSC_VER >= 1500
|
||||
// Until MSVC 9.0 Windows SDK was bundled in Visual Studio and didn't have UnDecorateSymbolNameW.
|
||||
// Supposedly, Windows SDK 6.0A was the first standalone one and it is used with MSVC 9.0.
|
||||
#define BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW
|
||||
#elif !defined(BOOST_WINAPI_IS_MINGW)
|
||||
// MinGW does not provide UnDecorateSymbolNameW (as of 2016-02-14)
|
||||
#define BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW
|
||||
#endif
|
||||
|
||||
#if !defined( BOOST_USE_WINDOWS_H )
|
||||
extern "C" {
|
||||
|
||||
struct API_VERSION;
|
||||
|
||||
BOOST_WINAPI_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
|
||||
UnDecorateSymbolName(
|
||||
boost::winapi::LPCSTR_ DecoratedName,
|
||||
boost::winapi::LPSTR_ UnDecoratedName,
|
||||
boost::winapi::DWORD_ UndecoratedLength,
|
||||
boost::winapi::DWORD_ Flags);
|
||||
|
||||
#if defined( BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW )
|
||||
BOOST_WINAPI_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
|
||||
UnDecorateSymbolNameW(
|
||||
boost::winapi::LPCWSTR_ DecoratedName,
|
||||
boost::winapi::LPWSTR_ UnDecoratedName,
|
||||
boost::winapi::DWORD_ UndecoratedLength,
|
||||
boost::winapi::DWORD_ Flags);
|
||||
#endif
|
||||
|
||||
BOOST_WINAPI_IMPORT API_VERSION* BOOST_WINAPI_WINAPI_CC
|
||||
ImagehlpApiVersion(BOOST_WINAPI_DETAIL_VOID);
|
||||
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
namespace boost {
|
||||
namespace winapi {
|
||||
|
||||
#if defined( BOOST_USE_WINDOWS_H )
|
||||
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_COMPLETE_ = UNDNAME_COMPLETE;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_LEADING_UNDERSCORES_ = UNDNAME_NO_LEADING_UNDERSCORES;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_MS_KEYWORDS_ = UNDNAME_NO_MS_KEYWORDS;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_FUNCTION_RETURNS_ = UNDNAME_NO_FUNCTION_RETURNS;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ALLOCATION_MODEL_ = UNDNAME_NO_ALLOCATION_MODEL;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ALLOCATION_LANGUAGE_ = UNDNAME_NO_ALLOCATION_LANGUAGE;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_MS_THISTYPE_ = UNDNAME_NO_MS_THISTYPE;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_CV_THISTYPE_ = UNDNAME_NO_CV_THISTYPE;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_THISTYPE_ = UNDNAME_NO_THISTYPE;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ACCESS_SPECIFIERS_ = UNDNAME_NO_ACCESS_SPECIFIERS;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_THROW_SIGNATURES_ = UNDNAME_NO_THROW_SIGNATURES;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_MEMBER_TYPE_ = UNDNAME_NO_MEMBER_TYPE;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_RETURN_UDT_MODEL_ = UNDNAME_NO_RETURN_UDT_MODEL;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_32_BIT_DECODE_ = UNDNAME_32_BIT_DECODE;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NAME_ONLY_ = UNDNAME_NAME_ONLY;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ARGUMENTS_ = UNDNAME_NO_ARGUMENTS;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_SPECIAL_SYMS_ = UNDNAME_NO_SPECIAL_SYMS;
|
||||
|
||||
#else // defined( BOOST_USE_WINDOWS_H )
|
||||
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_COMPLETE_ = 0x00000000;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_LEADING_UNDERSCORES_ = 0x00000001;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_MS_KEYWORDS_ = 0x00000002;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_FUNCTION_RETURNS_ = 0x00000004;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ALLOCATION_MODEL_ = 0x00000008;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ALLOCATION_LANGUAGE_ = 0x00000010;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_MS_THISTYPE_ = 0x00000020;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_CV_THISTYPE_ = 0x00000040;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_THISTYPE_ = 0x00000060;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ACCESS_SPECIFIERS_ = 0x00000080;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_THROW_SIGNATURES_ = 0x00000100;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_MEMBER_TYPE_ = 0x00000200;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_RETURN_UDT_MODEL_ = 0x00000400;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_32_BIT_DECODE_ = 0x00000800;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NAME_ONLY_ = 0x00001000;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_ARGUMENTS_ = 0x00002000;
|
||||
BOOST_CONSTEXPR_OR_CONST DWORD_ UNDNAME_NO_SPECIAL_SYMS_ = 0x00004000;
|
||||
|
||||
#endif // defined( BOOST_USE_WINDOWS_H )
|
||||
|
||||
using ::UnDecorateSymbolName;
|
||||
#if defined( BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW )
|
||||
using ::UnDecorateSymbolNameW;
|
||||
#endif
|
||||
|
||||
typedef struct BOOST_MAY_ALIAS API_VERSION {
|
||||
USHORT_ MajorVersion;
|
||||
USHORT_ MinorVersion;
|
||||
USHORT_ Revision;
|
||||
USHORT_ Reserved;
|
||||
} API_VERSION_, *LPAPI_VERSION_;
|
||||
|
||||
BOOST_FORCEINLINE LPAPI_VERSION_ ImagehlpApiVersion()
|
||||
{
|
||||
return reinterpret_cast<LPAPI_VERSION_>(::ImagehlpApiVersion());
|
||||
}
|
||||
|
||||
BOOST_FORCEINLINE DWORD_ undecorate_symbol_name(
|
||||
LPCSTR_ DecoratedName,
|
||||
LPSTR_ UnDecoratedName,
|
||||
DWORD_ UndecoratedLength,
|
||||
DWORD_ Flags)
|
||||
{
|
||||
return ::UnDecorateSymbolName(
|
||||
DecoratedName,
|
||||
UnDecoratedName,
|
||||
UndecoratedLength,
|
||||
Flags);
|
||||
}
|
||||
|
||||
#if defined( BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW )
|
||||
|
||||
BOOST_FORCEINLINE DWORD_ undecorate_symbol_name(
|
||||
LPCWSTR_ DecoratedName,
|
||||
LPWSTR_ UnDecoratedName,
|
||||
DWORD_ UndecoratedLength,
|
||||
DWORD_ Flags)
|
||||
{
|
||||
return ::UnDecorateSymbolNameW(
|
||||
DecoratedName,
|
||||
UnDecoratedName,
|
||||
UndecoratedLength,
|
||||
Flags);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#include <boost/winapi/detail/footer.hpp>
|
||||
|
||||
#endif // BOOST_WINAPI_PARTITION_DESKTOP
|
||||
#endif // BOOST_WINAPI_DBGHELP_HPP_INCLUDED_
|
||||
Reference in New Issue
Block a user