CMCore/inc/hgl/platform/os/MSWindows.h

153 lines
5.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef HGL_OS_WIN_INCLUDE
#define HGL_OS_WIN_INCLUDE
#include<malloc.h>
#include<winsock2.h> //winsock2必须在Windows.h前面不然会报错
#include<windows.h>
#include<uchar.h>
#undef min
#undef max
//--------------------------------------------------------------------------------------------------
using u32char =char32_t;
using u16char =wchar_t;
using os_char =wchar_t;
#define to_oschar to_u16
#define OS_TEXT(str) L##str
#define U8_TEXT(str) u8##str
#define U16_TEXT(str) L##str
#define U32_TEXT(str) U##str
#define os_main wmain
#define os_out std::wcout
#define os_in std::wcin
#define os_err std::wcerr
#define os_log std::wclog
#define HGL_OS_NAME OS_TEXT("Windows")
#if HGL_CPU == HGL_CPU_X86_32
#define HGL_LIB_OS "Win32" //库操作系统前缀
#elif HGL_CPU == HGL_CPU_X86_64
#define HGL_LIB_OS "Win64" //库操作系统前缀
#endif//HGL_CPU
//--------------------------------------------------------------------------------------------------
#define HGL_PLUGIN_FRONTNAME OS_TEXT("CMP.") //插件文件名前缀
#define HGL_PLUGIN_EXTNAME OS_TEXT(".DLL") //插件文件扩展名
#define HGL_PLUGIN_FUNC extern "C" __declspec(dllexport) //插件函数定义
#define HGL_DIRECTORY_SEPARATOR_RAWCHAR '\\' //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_U8CHAR U8_TEXT('\\') //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_WCHAR U16_TEXT('\\') //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_RAWSTR "\\" //目录分隔符
#define HGL_DIRECTORY_SEPARATOR OS_TEXT('\\') //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_STR OS_TEXT("\\") //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_U8STR U8_TEXT("\\")
#define HGL_LINE_END OS_TEXT("\r\n") //换行符
#define HGL_LINE_END_SIZE 2 //换行符长度
/**
* 从Windows 10(ver 1607)开始NTFS分区文件名最大长度为32767。
* 但由于文件系统的不同,我们需要使用 GetVolumeInformation 函数根据参数lpMaximumComponentLength的返回值来确定每个分区可使用的最大长度
*/
#define HGL_MAX_PATH MAX_PATH //文件名最大长度
#define HGL_MEM_ALIGN 16 //内存对齐字节数
//--------------------------------------------------------------------------------------------------
// == 目前MINGW和MSVC在以下接口上应该能保持一致了
#define hgl_malloc(size) _aligned_malloc(size,HGL_MEM_ALIGN)
#define hgl_realloc(ptr,size) _aligned_realloc(ptr,size,HGL_MEM_ALIGN)
#define hgl_free _aligned_free
inline void *hgl_align_malloc(size_t n,size_t align_size)
{
if(n<=0)return(nullptr);
if(align_size==0)
align_size=HGL_MEM_ALIGN;
return _aligned_malloc(n,align_size);
}
template<typename T>
inline T *hgl_align_malloc(size_t n)
{
if(n<=0)return(nullptr);
return (T *)_aligned_malloc(n*sizeof(T),alignof(T));
}
inline void *hgl_align_realloc(void *ptr,size_t n,size_t align_size)
{
if(n<=0)
{
if(ptr)
_aligned_free(ptr);
return(nullptr);
}
if(align_size==0)
align_size=HGL_MEM_ALIGN;
if(ptr)
return _aligned_realloc(ptr,n,align_size);
else
return _aligned_malloc(n,align_size);
}
template<typename T>
inline T *hgl_align_realloc(T *ptr,size_t n)
{
if(n<=0)
{
if(ptr)
_aligned_free(ptr);
return(nullptr);
}
if(ptr)
return (T *)_aligned_realloc(ptr,n*sizeof(T),alignof(T));
else
return (T *)_aligned_malloc(n*sizeof(T),alignof(T));
}
#define OS_EXTERNAL_H <winbase.h>
using ExternalModulePointer =HMODULE;
#define pi_get GetProcAddress
#define pi_close FreeLibrary
#ifdef HGL_64_BITS
#define struct_stat64 struct _stat64
#define hgl_lstat64 _wstat64
#endif
#if HGL_32_BITS
#define struct_stat64 struct _stati64
#define hgl_lstat64 _wstat32i64
#endif
//#define hgl_stat64 _stat64
#define hgl_lseek64 _lseeki64
#define hgl_tell64(fp) _telli64(fp)
#define hgl_fstat64 _fstati64
#define hgl_read64 _read
#define hgl_write64 _write
using thread_mutex_ptr =CRITICAL_SECTION;
using thread_ptr =HANDLE;
using rwlock_ptr =SRWLOCK;
using semaphore_ptr =HANDLE;
using cond_var_ptr =CONDITION_VARIABLE;
#define THREAD_FUNC DWORD WINAPI
#define HGL_THREAD_DETACH_SELF
using proc_mutex_ptr =HANDLE;
//--------------------------------------------------------------------------------------------------
#endif//HGL_OS_WIN_INCLUDE