| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | /* * 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// 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_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CCUnDecorateSymbolName(    boost::winapi::LPCSTR_ DecoratedName,    boost::winapi::LPSTR_ UnDecoratedName,    boost::winapi::DWORD_ UndecoratedLength,    boost::winapi::DWORD_ Flags);#if defined( BOOST_WINAPI_DETAIL_HAS_UNDECORATESYMBOLNAMEW )BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CCUnDecorateSymbolNameW(    boost::winapi::LPCWSTR_ DecoratedName,    boost::winapi::LPWSTR_ UnDecoratedName,    boost::winapi::DWORD_ UndecoratedLength,    boost::winapi::DWORD_ Flags);#endifBOOST_SYMBOL_IMPORT API_VERSION* BOOST_WINAPI_WINAPI_CCImagehlpApiVersion(BOOST_WINAPI_DETAIL_VOID);} // extern "C"#endifnamespace 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;#endiftypedef 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}}#endif // BOOST_WINAPI_PARTITION_DESKTOP#endif // BOOST_WINAPI_DBGHELP_HPP_INCLUDED_
 |