#ifndef _GD_CPP_H_
#define _GD_CPP_H_

#include "GdCPP_Exports.h"
#include <atlstr.h> // for CString
// 常用标准C++库
#include <cstdint>
#include <string>
#include <vector>
#include <list>
#include <filesystem>
namespace fs = std::filesystem;

// 常用功能
#include "AlignSize.h"
#include "CTic.h"
#include "properties.h"
#include "sVersion.h"		// 放在这目的是让GdCpp的sVersion优先于IGrabber目录里的
#include "StringHelper.h"

// 常用第三方库函数
#include "json\ksjson.h"
#include "spdlog/spdlog.h"
#include "spdlog/fmt/chrono.h" // support for user defined types
#include "spdlog/fmt/fmt.h"
#include "spdlog/fmt/ostr.h" // support for user defined types
#include "spdlog/fmt/xchar.h"
#include "spdlog/fmt/bundled/printf.h"

#include "Tools.h"

#ifdef SPDLOG_COMPILED_LIB
	#ifdef _DEBUG
		#pragma comment(lib, "spdlogd.lib")
	#else
		#pragma comment(lib, "spdlog.lib")
	#endif
#endif

/** 
 *
 * 定义宏PURE_VIRTUAL_CLASS，加在一个纯虚类前面，告诉VC编译器不创建虚表，减小生成的代码，
 * 并避免链接错误"error LNK2001: 无法解析的外部符号 __purecall"
 *
 * 对于linux下的GCC编译器不需要这个指定，PURE_VIRTUAL_CLASS定义为空，
  */

#ifndef PURE_VIRTUAL_CLASS
	#ifdef _MSC_VER // VC编译器
		#define PURE_VIRTUAL_CLASS __declspec(novtable)
	#else // 其它编译器
		#define PURE_VIRTUAL_CLASS
	#endif
#endif

#endif //_KS_CPP_H_