267 lines
6.5 KiB
C
267 lines
6.5 KiB
C
// This is a part of the Active Template Library.
|
|
// Copyright (C) 1996-2001 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// This source code is only intended as a supplement to the
|
|
// Active Template Library Reference and related
|
|
// electronic documentation provided with the library.
|
|
// See these sources for detailed information regarding the
|
|
// Active Template Library product.
|
|
|
|
#ifndef __ATLDEF_H__
|
|
#define __ATLDEF_H__
|
|
|
|
#pragma once
|
|
|
|
#include <atlres.h>
|
|
|
|
#ifndef RC_INVOKED
|
|
|
|
#ifndef __cplusplus
|
|
#error ATL requires C++ compilation (use a .cpp suffix)
|
|
#endif
|
|
|
|
#ifdef UNDER_CE
|
|
#error ATL not currently supported for CE
|
|
#endif
|
|
|
|
#ifdef _UNICODE
|
|
#ifndef UNICODE
|
|
#define UNICODE // UNICODE is used by Windows headers
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef UNICODE
|
|
#ifndef _UNICODE
|
|
#define _UNICODE // _UNICODE is used by C-runtime/MFC headers
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#ifndef DEBUG
|
|
#define DEBUG
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _WIN64
|
|
#define _ATL_SUPPORT_VT_I8 // Always support VT_I8 on Win64.
|
|
#endif
|
|
|
|
#ifndef ATLASSERT
|
|
#define ATLASSERT(expr) _ASSERTE(expr)
|
|
#endif
|
|
|
|
#ifndef ATLVERIFY
|
|
#ifdef _DEBUG
|
|
#define ATLVERIFY(expr) ATLASSERT(expr)
|
|
#else
|
|
#define ATLVERIFY(expr) (expr)
|
|
#endif // DEBUG
|
|
#endif // ATLVERIFY
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// __declspec(novtable) is used on a class declaration to prevent the vtable
|
|
// pointer from being initialized in the constructor and destructor for the
|
|
// class. This has many benefits because the linker can now eliminate the
|
|
// vtable and all the functions pointed to by the vtable. Also, the actual
|
|
// constructor and destructor code are now smaller.
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// This should only be used on a class that is not directly createable but is
|
|
// rather only used as a base class. Additionally, the constructor and
|
|
// destructor (if provided by the user) should not call anything that may cause
|
|
// a virtual function call to occur back on the object.
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// By default, the wizards will generate new ATL object classes with this
|
|
// attribute (through the ATL_NO_VTABLE macro). This is normally safe as long
|
|
// the restriction mentioned above is followed. It is always safe to remove
|
|
// this macro from your class, so if in doubt, remove it.
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifdef _ATL_DISABLE_NO_VTABLE
|
|
#define ATL_NO_VTABLE
|
|
#else
|
|
#define ATL_NO_VTABLE __declspec(novtable)
|
|
#endif
|
|
|
|
#ifdef _ATL_DISABLE_NOTHROW
|
|
#define ATL_NOTHROW
|
|
#else
|
|
#define ATL_NOTHROW __declspec(nothrow)
|
|
#endif
|
|
|
|
#ifdef _ATL_DISABLE_FORCEINLINE
|
|
#define ATL_FORCEINLINE
|
|
#else
|
|
#define ATL_FORCEINLINE __forceinline
|
|
#endif
|
|
|
|
#ifdef _ATL_DISABLE_NOINLINE
|
|
#define ATL_NOINLINE
|
|
#else
|
|
#define ATL_NOINLINE __declspec( noinline )
|
|
#endif
|
|
|
|
//#define _ATL_DISABLE_DEPRECATED //REVIEW: Waiting for recent compiler
|
|
|
|
#ifdef _ATL_DISABLE_DEPRECATED
|
|
#define ATL_DEPRECATED
|
|
#else
|
|
#define ATL_DEPRECATED __declspec( deprecated )
|
|
#endif
|
|
|
|
// If ATL70.DLL is being used then _ATL_STATIC_REGISTRY doesn't really make sense
|
|
#ifdef _ATL_DLL
|
|
#undef _ATL_STATIC_REGISTRY
|
|
#else
|
|
// If not linking to ATL70.DLL, use the static registrar and not building atl.dll
|
|
#ifndef _ATL_DLL_IMPL
|
|
#ifndef _ATL_STATIC_REGISTRY
|
|
#define _ATL_STATIC_REGISTRY
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _ATL_DEBUG_REFCOUNT
|
|
#ifndef _ATL_DEBUG_INTERFACES
|
|
#define _ATL_DEBUG_INTERFACES
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#ifndef _ATL_DEBUG
|
|
#define _ATL_DEBUG
|
|
#endif // _ATL_DEBUG
|
|
#endif // _DEBUG
|
|
|
|
#ifdef _ATL_DEBUG_INTERFACES
|
|
#ifndef _ATL_DEBUG
|
|
#define _ATL_DEBUG
|
|
#endif // _ATL_DEBUG
|
|
#endif // _ATL_DEBUG_INTERFACES
|
|
|
|
#ifndef _ATL_HEAPFLAGS
|
|
#ifdef _MALLOC_ZEROINIT
|
|
#define _ATL_HEAPFLAGS HEAP_ZERO_MEMORY
|
|
#else
|
|
#define _ATL_HEAPFLAGS 0
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef _ATL_PACKING
|
|
#define _ATL_PACKING 8
|
|
#endif
|
|
|
|
#if defined(_ATL_DLL)
|
|
#define ATLAPI extern "C" HRESULT __declspec(dllimport) __stdcall
|
|
#define ATLAPI_(x) extern "C" __declspec(dllimport) x __stdcall
|
|
#define ATLINLINE
|
|
#elif defined(_ATL_DLL_IMPL)
|
|
#define ATLAPI extern "C" inline HRESULT __stdcall
|
|
#define ATLAPI_(x) extern "C" inline x __stdcall
|
|
#define ATLINLINE
|
|
#else
|
|
#define ATLAPI ATL_NOTHROW HRESULT __stdcall
|
|
#define ATLAPI_(x) ATL_NOTHROW x __stdcall
|
|
#define ATLINLINE inline
|
|
#endif
|
|
|
|
#ifdef _ATL_NO_EXCEPTIONS
|
|
#ifdef _AFX
|
|
#error MFC projects cannot define _ATL_NO_EXCEPTIONS
|
|
#endif
|
|
#else
|
|
#ifndef _CPPUNWIND
|
|
#define _ATL_NO_EXCEPTIONS
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef _CPPUNWIND
|
|
|
|
#ifndef ATLTRYALLOC
|
|
|
|
#ifdef _AFX
|
|
#define ATLTRYALLOC(x) try{x;} catch(CException* e){e->Delete();}
|
|
#else
|
|
#define ATLTRYALLOC(x) try{x;} catch(...){}
|
|
#endif //__AFX
|
|
|
|
#endif //ATLTRYALLOC
|
|
|
|
// If you define _ATLTRY before including this file, then
|
|
// you should define _ATLCATCH and _ATLRETHROW as well.
|
|
#ifndef _ATLTRY
|
|
#define _ATLTRY try
|
|
#ifdef _AFX
|
|
#define _ATLCATCH( e ) catch( CException* e )
|
|
#else
|
|
#define _ATLCATCH( e ) catch( CAtlException e )
|
|
#endif
|
|
|
|
#define _ATLCATCHALL() catch( ... )
|
|
|
|
#ifdef _AFX
|
|
#define _ATLDELETEEXCEPTION(e) e->Delete();
|
|
#else
|
|
#define _ATLDELETEEXCEPTION(e) e;
|
|
#endif
|
|
|
|
#define _ATLRETHROW throw
|
|
#endif // _ATLTRY
|
|
|
|
#else //_CPPUNWIND
|
|
|
|
#ifndef ATLTRYALLOC
|
|
#define ATLTRYALLOC(x) x;
|
|
#endif //ATLTRYALLOC
|
|
|
|
// if _ATLTRY is defined before including this file then
|
|
// _ATLCATCH and _ATLRETHROW should be defined as well.
|
|
#ifndef _ATLTRY
|
|
#define _ATLTRY
|
|
#define _ATLCATCH( e ) __pragma(warning(push)) __pragma(warning(disable: 4127)) if( false ) __pragma(warning(pop))
|
|
#define _ATLCATCHALL() __pragma(warning(push)) __pragma(warning(disable: 4127)) if( false ) __pragma(warning(pop))
|
|
#define _ATLDELETEEXCEPTION(e)
|
|
#define _ATLRETHROW
|
|
#endif // _ATLTRY
|
|
|
|
#endif //_CPPUNWIND
|
|
|
|
#ifndef ATLTRY
|
|
#define ATLTRY(x) ATLTRYALLOC(x)
|
|
#endif //ATLTRY
|
|
|
|
#define offsetofclass(base, derived) ((DWORD_PTR)(static_cast<base*>((derived*)_ATL_PACKING))-_ATL_PACKING)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Master version numbers
|
|
|
|
#define _ATL 1 // Active Template Library
|
|
#define _ATL_VER 0x0700 // Active Template Library version 7.0
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Threading
|
|
|
|
#ifndef _ATL_SINGLE_THREADED
|
|
#ifndef _ATL_APARTMENT_THREADED
|
|
#ifndef _ATL_FREE_THREADED
|
|
#define _ATL_FREE_THREADED
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
// UUIDOF
|
|
#ifndef _ATL_NO_UUIDOF
|
|
#define _ATL_IIDOF(x) __uuidof(x)
|
|
#else
|
|
#define _ATL_IIDOF(x) IID_##x
|
|
#endif
|
|
|
|
#endif // RC_INVOKED
|
|
|
|
#define ATLAXWIN_CLASS "AtlAxWin7"
|
|
#define ATLAXWINLIC_CLASS "AtlAxWinLic7"
|
|
|
|
#endif // __ATLDEF_H__
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|