#pragma once

#   define STRICT // Для более строгой типизации. Не верить заявлениям MS, что
		  // в Visual C++ STRICT определено по умолчанию.
#   define WIN32_LEAN_AND_MEAN // Для ускорения компиляции
#   define _WIN32_WINNT 0x0600 // Должно работать начиная с XP

#define CADES_NOFORCE_MANIFEST
#define XADES_NOFORCE_MANIFEST

#define CPLIB_STATIC
#define CPASN1_STATIC
#define ADES_STATIC
#define CADES_STATIC
#define XADES_STATIC

#define CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS
#define CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
#define CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
#define CERT_CHAIN_PARA_HAS_EXTRA_FIELDS
#define CADES_PARA_HAS_EXTRA_FIELDS

#define READPKIOBJECT

#if defined _WIN32
#   define CRYPT_OID_INFO_HAS_EXTRA_FIELDS
#   define CRYPTUI
#   include "../../CSP/src/capihook/capiswitch.h"
#endif	/* _WIN32 */

//#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS

#include <vector>

#ifdef DARWIN
#include <CoreServices/CoreServices.h>
#endif

#if defined UNIX
#   include <stdint.h>
#   include <limits.h>
#   include "CSP_WinDef.h"
#   include "CSP_WinError.h"
#   include <string>
#   include <stdarg.h>
    typedef uint32_t UINT32;
#   define interface class	/* dim XXX: CCSCLI-48 */
#   define __cdecl
#endif	/* UNIX */

#include <iostream>
#include <atltrace2.h>
#ifdef _WIN32
// mydss.dll использует mfc, поэтому включаем здесь
#include "mydss.h"
#endif	/* _WIN32 */
#ifndef UNIX
#pragma warning (push)
#pragma warning (disable:4838)
#endif
#include <atlbase.h>
#ifndef UNIX
#pragma warning (pop)
#endif
#include <atlcrypt2.h>
#include <atlenc2.h>
#include <atltrace2.inl>

//Должен быть после atl header но до наших хедеров.
#ifdef UNIX
#include "dprint.h"
#undef CPTraceGeneral
#define CPTraceGeneral 1
#undef CPTRACE2
extern TSupportDbContext* cades_db_ctx;
#define CPTRACE2(ATLCategory,level,param,...)  DbTrace(DB_LOG,(FTEXT(cades_db_ctx, param),##__VA_ARGS__))
#endif  //UNIX

#include "cplib/Blob.h"
#include "cplib/DateTime.h"
#include "base64.h"
#include "GetCertID.h"
#include "cades.h"
#include "xades.h"
