|
|
#pragma once
|
|
|
#ifndef _DLL_INCLUDE_SYSAPI_H
|
|
|
#define _DLL_INCLUDE_SYSAPI_H
|
|
|
#include "syserr.h"
|
|
|
|
|
|
/*-------宏定义,决定使用哪个平台*/
|
|
|
#ifndef _WINDOWS
|
|
|
#define _WINDOWS
|
|
|
#endif
|
|
|
//#define __MAC
|
|
|
//#define __LINUX
|
|
|
/*--------宏定义结束------------*/
|
|
|
|
|
|
#ifdef _WINDOWS
|
|
|
#include <direct.h>
|
|
|
#include <iomanip>
|
|
|
#include <io.h>
|
|
|
#include <stdarg.h>
|
|
|
#pragma warning(disable: 4996)
|
|
|
#else
|
|
|
#include <sys/dir.h>
|
|
|
#include <sys/type.h>
|
|
|
#endif
|
|
|
|
|
|
#define RETURN_CHK_NOPRT(p, v) if (!(p)) \
|
|
|
{\
|
|
|
return (v); \
|
|
|
}
|
|
|
|
|
|
#define ZERO_CHK(p) if (!(p)) \
|
|
|
{ \
|
|
|
return; \
|
|
|
}
|
|
|
|
|
|
//安全释放,并置空
|
|
|
#define FREE_ANY(p) if (0 != (p)) \
|
|
|
{\
|
|
|
delete (p);\
|
|
|
(p) = NULL;\
|
|
|
}
|
|
|
|
|
|
//安全释放数组,并置空
|
|
|
#define FREE_ARRAY(p) if (0 != (p)) \
|
|
|
{\
|
|
|
delete [](p);\
|
|
|
(p) = NULL;\
|
|
|
}
|
|
|
|
|
|
//安全删除一个timer
|
|
|
#define Kill_Timer(p) if (-1 != (p)) \
|
|
|
{\
|
|
|
kill_timer(p);\
|
|
|
(p) = -1;\
|
|
|
}
|
|
|
|
|
|
#define MAKEUL(r,h,l) { \
|
|
|
(r) = (h); \
|
|
|
(r) <<= 32; \
|
|
|
(r) |= l; \
|
|
|
}
|
|
|
|
|
|
#define ZEROF 0.0000000001 //小于这个数认为等于0
|
|
|
|
|
|
//判断浮点数是否相等
|
|
|
#define EQUALF(x,y) (abs((x) - (y)) < ZEROF ? true : false)
|
|
|
|
|
|
//判断浮点数是否为0
|
|
|
#define ISZEROF(x) (((x) < ZEROF && (x) > -ZEROF) ? true : false)
|
|
|
|
|
|
#ifndef MAX
|
|
|
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
|
|
#endif
|
|
|
|
|
|
#ifndef MIN
|
|
|
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
|
|
#endif
|
|
|
|
|
|
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
|
|
|
|
|
|
/*-----------------------------socket定义--------------------------------*/
|
|
|
|
|
|
#ifndef TRUE
|
|
|
#define TRUE 1
|
|
|
#endif
|
|
|
|
|
|
#ifndef FALSE
|
|
|
#define FALSE 0
|
|
|
#endif
|
|
|
|
|
|
//这样定义方便在别的头文件重复定义
|
|
|
#ifndef _NO_DEF_TYPE
|
|
|
#define ushort unsigned short
|
|
|
#define uint unsigned int
|
|
|
#define ulong unsigned long
|
|
|
#define llong long long
|
|
|
#define ullong unsigned long long
|
|
|
#define uchar unsigned char
|
|
|
#define cstr const char*
|
|
|
#endif
|
|
|
|
|
|
// typedef unsigned char uchar;
|
|
|
// typedef unsigned short ushort;
|
|
|
// typedef unsigned int uint;
|
|
|
// typedef unsigned long ulong;
|
|
|
// typedef long long llong;
|
|
|
// typedef unsigned long long ullong;
|
|
|
// typedef const char* cstr;
|
|
|
|
|
|
//定义C++库函数
|
|
|
#ifdef _WINDOWS
|
|
|
#define sys_stricmp _stricmp
|
|
|
//#define sys_strtok strtok_s
|
|
|
#else
|
|
|
#define sys_stricmp strcasecmp
|
|
|
//#define sys_strtok strsep
|
|
|
#endif
|
|
|
|
|
|
#define UINTMAX ((unsigned int)~((unsigned int)0))
|
|
|
#define INTMAX ((int)(UINTMAX >> 1))
|
|
|
#define INTMIN ((int)~INTMAX)
|
|
|
|
|
|
#define MAX_NAME_LEN 32
|
|
|
#define MAX_IP_LEN 16
|
|
|
#define MAX_BUF_LEN 256
|
|
|
#define MAX_TIMEOUT 0xFFFFFFFF //无限等待
|
|
|
#define ANY_IP "0.0.0.0" //ip通用
|
|
|
|
|
|
#define NULL 0
|
|
|
#define INVALID_SKT (int)~0 //无效socket
|
|
|
#define INVALID_HANDLE (Handle)-1 //无效句柄
|
|
|
#define INVALID_HANDLE_INT -1 //无效句柄
|
|
|
|
|
|
struct ST_SOCKADDR
|
|
|
{//网络套接字
|
|
|
char ip[MAX_IP_LEN];
|
|
|
unsigned int port;
|
|
|
int s;
|
|
|
};
|
|
|
|
|
|
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
|
|
|
|
|
|
/*
|
|
|
* Types
|
|
|
*/
|
|
|
#define SOCK_STREAM 1 /* stream socket */
|
|
|
#define SOCK_DGRAM 2 /* datagram socket */
|
|
|
#define SOCK_RAW 3 /* raw-protocol interface */
|
|
|
#define SOCK_RDM 4 /* reliably-delivered message */
|
|
|
#define SOCK_SEQPACKET 5 /* sequenced packet stream */
|
|
|
|
|
|
/*
|
|
|
* Protocols
|
|
|
*/
|
|
|
#define IPPROTO_IP 0 /* dummy for IP */
|
|
|
#define IPPROTO_ICMP 1 /* control message protocol */
|
|
|
#define IPPROTO_IGMP 2 /* group management protocol */
|
|
|
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
|
|
|
#define IPPROTO_TCP 6 /* tcp */
|
|
|
#define IPPROTO_PUP 12 /* pup */
|
|
|
#define IPPROTO_UDP 17 /* user datagram protocol */
|
|
|
#define IPPROTO_IDP 22 /* xns idp */
|
|
|
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */
|
|
|
|
|
|
#define IPPROTO_RAW 255 /* raw IP packet */
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化网络协议栈
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_InitNet();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放网络协议栈
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI sys_UninitNet();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 通过ICMP协议检测一个远程IP是否接通
|
|
|
*Intput: remoteIP 远程IP地址
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_ChkNet(const char* remoteIP);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个TCP/UDP socket
|
|
|
*Intput: af AF_INET 支持TCP UDP等通用协议
|
|
|
type 一般选择 SOCK_STREAM 流协议
|
|
|
protocol TCP为6 UDP为17,根据平台可能会不同
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回socket句柄,失败返回 INVALID_SKT
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Socket(int af, int type, int protocol);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭一个socket
|
|
|
*Intput: s socket句柄
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI sys_CloseSocket(int s);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 绑定一个socket到某个端口
|
|
|
*Intput: s socket句柄
|
|
|
lpIP ip地址
|
|
|
uPort 端口
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Bind(int s, const char* lpIP, unsigned short uPort);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 监听一个服务端socket
|
|
|
*Intput: s socket句柄
|
|
|
maxCnt 最大等待连接数量,同时连接时只支持
|
|
|
最大数量连接,比如最大为3,如果4个客户端
|
|
|
同时连接,会有一个失败,等其中一个连接ok,
|
|
|
再连就能成功
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Listen(int s, int maxCnt);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 接受一个客户端连接,只支持服务端socket
|
|
|
*Intput: s socket句柄
|
|
|
timeout 超时设置,默认永远等待
|
|
|
*Output: pclient 接受的客户端信息 包括通讯用的socket
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Accept(int s, ST_SOCKADDR* pclient, int timeout = MAX_TIMEOUT);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 使用socket连接服务端
|
|
|
*Intput: s socket句柄
|
|
|
lpServer 服务端IP
|
|
|
uPort 服务端端口
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Connect(int s, const char* lpServer, unsigned short uPort);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 同步接收一个socket消息, 先select判断,再接收,否则阻塞
|
|
|
*Intput: s socket句柄
|
|
|
len 接收缓冲区大小 判断连接时 len = 0
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回接收到的字符串长度,失败返回错误码
|
|
|
*PS: 返回 ERR_NO_CONNECT 说明socket已经断开连接
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Recv(int s, char* buf, int len);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 判断一组socket是否有消息可接收
|
|
|
*Intput: s socket句柄数组
|
|
|
count socket数组大小
|
|
|
len 接收缓冲区大小 判断连接时 len = 0
|
|
|
timeout 超时设置,默认永远等待
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回有消息触发的s索引,失败返回错误
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Select(int* s, int count, int timeout = MAX_TIMEOUT);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 发送一个socket消息
|
|
|
*Intput: s socket句柄
|
|
|
buf 要发送的消息内容
|
|
|
len 要发送的内容大小
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回发送数据长度,失败返回错误码
|
|
|
*PS: 返回 ERR_NO_CONNECT 说明socket已经断开连接
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_Send(int s, const char* buf, int len);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个socket的相关信息(ip,port)
|
|
|
*Intput: s socket句柄
|
|
|
*Output: paddr 获取的信息结构体缓冲区
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetSockName(int s, ST_SOCKADDR* paddr);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取本地公网IP地址
|
|
|
*Intput: pszurl 可以获取到IP地址的网页实际地址 -- http://2017.ip138.com/ic.asp
|
|
|
*Output: pszip 公网ip地址
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_public_ips(const char* pszurl, char* pszip);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取本地所有IP地址, 返回数量 存入ips串, 以0分割
|
|
|
*Intput: NULL
|
|
|
*Output: ips ip地址合集,以0分割 双0结尾
|
|
|
*Return: 成功返回获取到的ip数量,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_local_ips(char* ips);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: UDP接收消息接口,同tcp一样,先select判断
|
|
|
*Intput: s socket句柄
|
|
|
buf 接收消息缓冲区
|
|
|
len 接收缓冲区大小 判断连接时 len = 0
|
|
|
ip 传出远端IP
|
|
|
port 从哪个端口发来的? 传出远端发送端口
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回接收到的字符串长度,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_RecvFrom(int s, char* buf, int len, char* ip = 0, unsigned short* port = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: UDP发送消息接口
|
|
|
*Intput: s socket句柄
|
|
|
ip 要发送的ip 为NULL 时,广播消息
|
|
|
port 要发送的端口
|
|
|
buf 要发送的消息内容
|
|
|
len 要发送的内容大小
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回发送数据长度,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_SendTo(int s, const char* ip, unsigned short port, char* buf, int len);
|
|
|
|
|
|
/*---------------------------socket定义结束------------------------------*/
|
|
|
|
|
|
|
|
|
typedef struct SYS_TIME
|
|
|
{//时间结构体
|
|
|
unsigned short wYear;
|
|
|
unsigned short wMonth;
|
|
|
unsigned short wDayOfWeek;
|
|
|
unsigned short wDay;
|
|
|
unsigned short wHour;
|
|
|
unsigned short wMinute;
|
|
|
unsigned short wSecond;
|
|
|
unsigned short wMilliseconds;
|
|
|
} *LPSYS_TIME;
|
|
|
|
|
|
enum SYS_FILE_ATTRIBUTE
|
|
|
{//文件属性结构体
|
|
|
FATTRIBUTE_NORMAL = 0x01, //普通文件
|
|
|
FATTRIBUTE_COMPRESSED = 0x02, //压缩文件
|
|
|
FATTRIBUTE_HIDDEN = 0x04, //隐藏文件/目录
|
|
|
FATTRIBUTE_READONLY = 0x08, //只读文件/目录
|
|
|
FATTRIBUTE_DIRECTORY = 0x10, //目录,文件夹
|
|
|
};
|
|
|
|
|
|
typedef struct SYS_FIND_DATAA
|
|
|
{//查找文件结构体
|
|
|
unsigned int dwFileAttributes; //文件属性 SYS_FILE_ATTRIBUTE一项或多项组合
|
|
|
SYS_TIME ftCreationTime; //创建时间
|
|
|
SYS_TIME ftLastAccessTime; //访问时间
|
|
|
SYS_TIME ftLastWriteTime; //最后修改时间
|
|
|
unsigned int nFileSizeHigh;
|
|
|
unsigned int nFileSizeLow;
|
|
|
unsigned int dwReserved0;
|
|
|
unsigned int dwReserved1;
|
|
|
char cFileName[MAX_BUF_LEN]; //只有文件名称,没有全路径
|
|
|
char cAlternateFileName[14];
|
|
|
#ifdef __MAC
|
|
|
unsigned int dwFileType;
|
|
|
unsigned int dwCreatorType;
|
|
|
unsigned int wFinderFlags;
|
|
|
#endif
|
|
|
} *LPSYS_FIND_DATAA;
|
|
|
|
|
|
//查找文件修改参数
|
|
|
enum EM_FILE_NOTIFY_OPTION
|
|
|
{
|
|
|
SYS_FILE_NOTIFY_CHANGE_NAME = 0x001, //文件名
|
|
|
SYS_FILE_NOTIFY_CHANGE_DIR_NAME = 0x002, //路径
|
|
|
SYS_FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004, //属性
|
|
|
SYS_FILE_NOTIFY_CHANGE_SIZE = 0x008, //大小
|
|
|
SYS_FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010, //最后修改时间
|
|
|
SYS_FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020, //最后读取、修改
|
|
|
SYS_FILE_NOTIFY_CHANGE_CREATION = 0x040, //创建时间
|
|
|
SYS_FILE_NOTIFY_CHANGE_SECURITY = 0x100, //访问权限
|
|
|
};
|
|
|
|
|
|
typedef void* Handle;
|
|
|
typedef int (WINAPI *PROCEX)(void* param);
|
|
|
typedef int (WINAPI *FUN)();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个普通线程
|
|
|
*Intput: lpStartAddress 线程执行函数地址
|
|
|
lpParameter 执行函数附加参数
|
|
|
pid 若需要传回线程ID,可传入
|
|
|
*Output: NULL
|
|
|
*Return: 返回线程句柄,失败返回 INVALID_HANDLE
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_CreateThread(PROCEX lpStartAddress, void* lpParameter, int* pid = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前线程ID
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前线程ID
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetCurrentThreadId();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 挂起一个线程
|
|
|
*Intput: hThread 线程句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_SuspendThread(Handle hThread);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 恢复一个线程,挂起时才能使用
|
|
|
*Intput: hThread 线程句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_ResumeThread(Handle hThread);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 强制终止一个线程
|
|
|
*Intput: hThread 线程句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_TerminateThread(Handle hThread);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个事件
|
|
|
*Intput: bManualReset 是否为手动设置信号,自动模式,则等待到信号自动置为无信号
|
|
|
bInitialState 初始信号
|
|
|
lpName 事件名称,可以为NULL,垮进程调用时,应该设置为有名事件
|
|
|
*Output: NULL
|
|
|
*Return: 返回事件句柄,失败返回 INVALID_HANDLE
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_CreateEvent(int bManualReset, int bInitialState, const char* lpName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 打开一个命名事件,实现进程间通信
|
|
|
*Intput: lpName 事件名称
|
|
|
*Output: NULL
|
|
|
*Return: 返回事件句柄,失败返回 INVALID_HANDLE
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_OpenEvent(const char* lpName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 等待一个事件有信号
|
|
|
*Intput: hHandle 事件句柄
|
|
|
dwMilliseconds 等待时间,单位ms TIME_MAX 为无限等待
|
|
|
lpName 事件名称,可以为NULL,垮进程调用时,应该设置为有名事件
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_WaitForSingleObject(Handle hHandle, unsigned int iMilliseconds = MAX_TIMEOUT);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 等待多个事件有信号, 有信号时,返回最小
|
|
|
索引值的event,不返回的可以继续调用sys_WaitForMultipleObjects
|
|
|
等待,直到没有信号为止
|
|
|
*Intput: nCount 事件数组大小
|
|
|
lpHandle 事件数组首地址
|
|
|
bWaitAll 是否等待所有事件有信号 0 表示不是
|
|
|
dwMilliseconds 等待时间,单位ms TIME_MAX 为无限等待
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回数组中有信号的最小索引值,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_WaitForMultipleObjects(unsigned int nCount, const Handle* lpHandle, int bWaitAll, unsigned int dwMilliseconds = MAX_TIMEOUT);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置一个事件为有信号
|
|
|
*Intput: hEvent 事件句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_SetEvent(Handle hEvent);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置一个事件为无信号
|
|
|
*Intput: hEvent 事件句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_ResetEvent(Handle hEvent);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置一个事件为无信号
|
|
|
*Intput: hEvent 事件句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_CloseHandle(Handle hObject);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个互斥量,基于进程间的
|
|
|
*Intput: bInitialOwner 是否标识自己为所有者 0为假
|
|
|
lpName 互斥量名称
|
|
|
*Output: NULL
|
|
|
*Return: 返回互斥量事件句柄
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_CreateMutex(int bInitialOwner, const char* lpName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 打开一个互斥量,基于进程间的
|
|
|
*Intput: bInitialOwner 是否标识自己为所有者 0为假
|
|
|
lpName 互斥量名称
|
|
|
*Output: NULL
|
|
|
*Return: 返回互斥量事件句柄
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_OpenMutex(int bInitialOwner, const char* lpName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放一个互斥量
|
|
|
*Intput: bInitialOwner 是否标识自己为所有者 0为假
|
|
|
lpName 互斥量名称
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_ReleaseMutex(Handle hMutex);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化一个临界区,跨线程同步用
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回一个句柄
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_InitializeCriticalSection();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除临界区句柄
|
|
|
*Intput: hSection 互斥量句柄
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI sys_DeleteCriticalSection(Handle hSection);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 进入临界区
|
|
|
*Intput: hSection 互斥量句柄
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI sys_EnterCriticalSection(Handle hSection);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 离开临界区
|
|
|
*Intput: hSection 互斥量句柄
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI sys_LeaveCriticalSection(Handle hSection);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 动态加载一个dll
|
|
|
*Intput: lpLibFileName 模块名包括.dll
|
|
|
*Output: NULL
|
|
|
*Return: 返回一个模块句柄, 失败返回 INVALID_HANDLE
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_LoadLibrary(const char* lpLibFileName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放一个模块
|
|
|
*Intput: hLibModule 模块句柄
|
|
|
*Output: 无
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_FreeLibrary(Handle hLibModule);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个模块中的函数接口地址
|
|
|
*Intput: hModule 模块句柄
|
|
|
lpProcName 函数名
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回函数地址,失败返回空
|
|
|
******************************************************/
|
|
|
EXPORT_C FUN WINAPI sys_GetProcAddress(Handle hModule, const char* lpProcName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 使当前线程休眠一段时间
|
|
|
*Intput: dwMilliseconds 休眠时间 单位ms
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI sys_Sleep(unsigned int dwMilliseconds);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取CPU时钟计时器
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前CPU时钟 单位: ms
|
|
|
******************************************************/
|
|
|
EXPORT_C unsigned long WINAPI sys_GetTickCount();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取CPU高精度时钟计时器
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前CPU时钟 精确倒1um 单位: ms
|
|
|
******************************************************/
|
|
|
EXPORT_C double WINAPI sys_GetMilliseconds();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取本地时间
|
|
|
*Intput: lpSysTime 时间结构体
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI sys_GetLocalTime(SYS_TIME* lpSysTime);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取CPU序列号 -- 保证传入大于32字节
|
|
|
*Intput: lpSN CPU序列号
|
|
|
lpLow 低位 -- 可以不传
|
|
|
*Output: lpSN CPU序列号
|
|
|
*Return: 成功返回1,失败返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetCPUSerialNo(char* lpSN, char* lpLow = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取第一个硬盘序列号 -- 保证传入大于32字节
|
|
|
*Intput: lpSN 硬盘序列号
|
|
|
*Output: lpSN 硬盘序列号
|
|
|
*Return: 成功返回1,失败返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetFirstHDSerial(char* lpSN);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取所有硬盘序列号
|
|
|
*Intput: lpSN 硬盘序列号
|
|
|
*Output: lpSN 硬盘序列号 序列号之间以'\0'间隔开
|
|
|
*Return: 成功返回硬盘数量,失败返回错误代码<0
|
|
|
*PS: 先传入NULL获取数量,再传入数量*32字节大小获取内容
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetAllHDSerial(char* lpSN = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查找硬盘序列号是否存在
|
|
|
*Intput: lpSN 硬盘序列号
|
|
|
*Output: NULL
|
|
|
*Return: 存在返回1,不存在返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_FindHDSerial(const char* lpSN);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取第一个网卡mac地址 -- 保证传入大于12字节
|
|
|
*Intput: lpMac 网卡mac地址
|
|
|
*Output: lpMac 网卡mac地址
|
|
|
*Return: 成功返回1,失败返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetFirstMacAddr(char* lpMac);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取所有网卡mac地址
|
|
|
*Intput: lpMac 网卡mac地址
|
|
|
*Output: lpMac 网卡mac地址 序列号之间以'\0'间隔开
|
|
|
*Return: 成功返回网卡数量,失败返回错误代码<0
|
|
|
*PS: 先传入NULL获取数量,再传入数量*12字节大小获取内容
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetAllMacAddr(char* lpMac = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查找网卡mac地址是否存在
|
|
|
*Intput: lpMac 网卡mac地址
|
|
|
*Output: NULL
|
|
|
*Return: 存在返回1,不存在返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_FindMacAddr(const char* lpMac);
|
|
|
|
|
|
//---文件操作---
|
|
|
enum SYS_FILE_ACESS
|
|
|
{//文件访问方式
|
|
|
FGENERIC_READ = 0x01, //读取 可与 SYS_GENERIC_WRITE 或操作
|
|
|
FGENERIC_WRITE = 0x02, //写入 可与 SYS_GENERIC_READ 或操作
|
|
|
};
|
|
|
|
|
|
enum SYS_FILE_OPEN
|
|
|
{//文件打开方式
|
|
|
SYS_CREATE_NEW = 1, //创建一个新的文件,若存在则失败
|
|
|
SYS_CREATE_ALWAYS = 2, //创建一个新的文件,若存在则覆盖
|
|
|
SYS_OPEN_EXISTING = 3, //打开一个已经存在的文件,若不存在,则失败
|
|
|
SYS_OPEN_ALWAYS = 4, //打开一个已经存在的文件,若不存在,则创建
|
|
|
SYS_TRUNCATE_EXISTING = 5, //打开一个已经存在的文件并置空,若不存在,则失败
|
|
|
};
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取系统配置项 -- 直接读取文件
|
|
|
*Intput: key 段落名 [xxx] <32字节
|
|
|
name 关键字 xxx=? <32字节
|
|
|
*Output: pszval 配置值 -- 保证传入256个字节
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 此接口可能需要管理员权限
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetConfig(const char* key, const char* name, char* pszval);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置系统配置项 -- 直接写入文件
|
|
|
*Intput: key 段落名 [xxx] <32字节
|
|
|
name 关键字 xxx=? <32字节
|
|
|
*Output: pszval 配置值 -- <256字节
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
*PS: 此接口可能需要管理员权限
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_SetConfig(const char* key, const char* name, const char* pszval);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前exe/dll所在绝对路径
|
|
|
*Intput: lpPath 路径缓冲区
|
|
|
*Output: lpPath 路径缓冲区
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetCurrentPath(char* lpPath);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个文件,可用于串口,及文件操作
|
|
|
*Intput: lpFileName 文件名
|
|
|
dwAccess 访问方式 参考 SYS_FILE_ACESS
|
|
|
dwCreationOption 打开方式,参考 SYS_FILE_OPEN
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回文件句柄,失败返回 INVALID_HANDLE
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_CreateFile(const char* lpFileName, unsigned int dwAccess, unsigned int dwCreationOption);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 往一个已经打开的文件写数据
|
|
|
*Intput: hFile 文件句柄
|
|
|
lpBuffer 待写入数据
|
|
|
nBufLen 待写入数据大小
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回写入的长度,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_WriteFile(Handle hFile, const void* lpBuffer, unsigned int nBufLen);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 从一个已经打开的文件读数据
|
|
|
*Intput: hFile 文件句柄
|
|
|
lpBuffer 数据缓冲区
|
|
|
nBufSize 缓存区大小
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回读取的长度,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_ReadFile(Handle hFile, void* lpBuffer, unsigned int nBufSize);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取文件的创建时间、修改时间
|
|
|
*Intput: lpFileName 文件详细路径
|
|
|
lpCreate 创建时间 可以传NULL
|
|
|
lpAccess 最后访问时间 可以传NULL
|
|
|
lpWrite 最后修改时间 可以传NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetFileTime(const char* lpFileName, SYS_TIME* lpCreate, SYS_TIME* lpAccess, SYS_TIME* lpWrite);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置文件的创建时间、修改时间
|
|
|
*Intput: lpFileName 文件详细路径
|
|
|
lpCreate 创建时间 可以传NULL
|
|
|
lpAccess 最后访问时间 可以传NULL
|
|
|
lpWrite 最后修改时间 可以传NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_SetFileTime(const char* lpFileName, SYS_TIME* lpCreate, SYS_TIME* lpAccess, SYS_TIME* lpWrite);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除一个文件
|
|
|
*Intput: lpFileName 文件详细路径
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_DeleteFile(const char* lpFileName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个文件的属性
|
|
|
*Intput: lpFileName 文件详细路径
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回一个整型属性值,失败返回错误码
|
|
|
*PS 返回值类型请参考 SYS_FILE_ATTRIBUTE 可能是一个或多个的或值
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetFileAttribute(const char* lpFileName);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取磁盘空间大小
|
|
|
*Intput: lpDirName 驱动器路径 如:"C:" "D:"
|
|
|
*Output: lpTotal 磁盘总大小 单位:字节 不获取可不传入
|
|
|
lpFree 磁盘可用空间大小 单位:字节 不获取可不传入
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_GetDiskSpace(const char* lpDirName, unsigned long long* lpTotal = 0, unsigned long long* lpFree = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查找第一个文件
|
|
|
*Intput: lpFileName 文件/目录/通配符*.ini
|
|
|
*Output: pFindData 返回查找到的文件结构体
|
|
|
*Return: 成功返回一个文件句柄,失败返回INVALID_HANDLE
|
|
|
*PS: 使用完该句柄后调用 sys_FindClose 关闭句柄
|
|
|
******************************************************/
|
|
|
EXPORT_C Handle WINAPI sys_FindFirstFile(const char* lpFileName, LPSYS_FIND_DATAA pFindData);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查找当前目录下一个文件
|
|
|
*Intput: hFindFile 由sys_FindFirstFile 创建句柄
|
|
|
*Output: pFindData 返回查找到的文件结构体
|
|
|
*Return: 成功返回TRUE(1) 失败返回FALSE(0)
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_FindNextFile(Handle hFindFile, LPSYS_FIND_DATAA pFindData);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭文件查找句柄
|
|
|
*Intput: hFindFile 由sys_FindFirstFile 创建句柄
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回TRUE(1) 失败返回FALSE(0)
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI sys_FindClose(Handle hFindFile);
|
|
|
|
|
|
//----------------------------------系统api定义结束----------------------------------//
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 把一段utf8编码字符串转换为gbk编码
|
|
|
*Intput: utf8 需要转换的utf8字符串
|
|
|
datalen gbk字符串容量
|
|
|
*Output: gbk 转换后的gbk字符串
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI utf8_to_gbk(const char* utf8, wchar_t* gbk, int datalen);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 把一段gbk编码字符串转换为utf8编码
|
|
|
*Intput: gbk 需要转换的gbk字符串
|
|
|
datalen utf8字符串容量
|
|
|
*Output: utf8 转换后的utf8字符串
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI gbk_to_utf8(const wchar_t* gbk, char* utf8, int datalen);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 把一段gbk编码字符串转换为ascii编码
|
|
|
*Intput: gbk 需要转换的gbk字符串
|
|
|
datalen ascii 字符串容量
|
|
|
*Output: ascii 转换后的ascii字符串
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI gbk_to_ascii(const wchar_t* gbk, char* ascii, int datalen);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 把一段ascii编码字符串转换为gbk编码
|
|
|
*Intput: ascii 需要转换的ascii字符串
|
|
|
datalen gbk字符串容量
|
|
|
*Output: gbk 转换后的gbk字符串
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI ascii_to_gbk(const char* ascii, wchar_t* gbk, int datalen);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查找某usb设备是否存在
|
|
|
*Intput: keywork 查找关键字(硬件ID)
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回1 失败返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI search_usb_dev(const char* keywork);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 拷贝一个字符串到剪贴板
|
|
|
*Intput: pbuff 字符串
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI copy_to_board(const char* pbuff);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前程序所在目录的根目录 -- "D:" "E:"
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回根目录, 失败返回NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C const char* WINAPI get_root_path();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 创建一个文件夹,若存在,则不创建
|
|
|
*Intput: path 文件夹全路径
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0, 失败返回错误码
|
|
|
*PS: 此接口可自动创建多层目录
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI create_path(const char* path);
|
|
|
|
|
|
/*****************************************************
|
|
|
*Function: 递归删除一个文件夹
|
|
|
*Intput: filepath 需要检测的文件全路径
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0, 失败返回错误码
|
|
|
*PS: 此接口可删除目标目录下所有子目录及文件
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI delete_path(const char* path);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 判断一个文件/文件夹是否存在
|
|
|
*Intput: filepath 需要检测的文件全路径
|
|
|
*Output: NULL
|
|
|
*Return: 存在返回1, 否则返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI is_file_exist(const char* filepath);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 判断一个文件是否只读
|
|
|
*Intput: filepath 需要检测的文件全路径
|
|
|
*Output: NULL
|
|
|
*Return: 只读返回1, 否则返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI is_file_read_only(const char* filepath);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个文件的大小
|
|
|
*Intput: filepath 需要检测的文件全路径
|
|
|
*Output: NULL
|
|
|
*Return: 返回文件大小>=0
|
|
|
******************************************************/
|
|
|
EXPORT_C unsigned long long WINAPI get_file_size(const char* filepath);
|
|
|
|
|
|
//若需要获取拷贝进度,请实现本接口
|
|
|
//progress 当前进度 -- 百分比
|
|
|
//pszname 当前正在拷贝的文件路径
|
|
|
//其中一个参数发生变化时就会回调
|
|
|
//返回FALSE会中断拷贝,返回TRUE继续拷贝
|
|
|
//*PS: 拷贝单个文件回调时,pszname会传NULL
|
|
|
typedef int (WINAPI *COPYPROC)(int progress, const char* pszname);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 复制一个文件
|
|
|
*Intput: file 原文件夹路径
|
|
|
newfile 新文件夹路径
|
|
|
pcall 进度回调函数,若传入参数,则会自动回调
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0, 失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI copy_file(const char* file, const char* newfile, COPYPROC pcall = NULL);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 递归复制一个文件夹所有内容到另外一个文件夹
|
|
|
*Intput: src 源目标文件夹路径
|
|
|
des 拷贝到哪?目的地路径
|
|
|
pext 扩展名 "txt or dat" -- 为空则全部拷贝
|
|
|
pcall 进度回调函数,若传入参数,则会自动回调
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0, 失败返回错误码
|
|
|
*PS:阻塞操作,可能执行会比较久
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI copy_path(const char* src, const char* des, const char* pext = NULL, COPYPROC pcall = NULL);
|
|
|
|
|
|
enum EMStrType
|
|
|
{//字符串类型
|
|
|
EMSTR_STRING = 0, //字符串
|
|
|
EMSTR_INT, //整型
|
|
|
EMSTR_DOUBLE, //浮点型
|
|
|
};
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取一个字符串类型
|
|
|
*Intput: pstr 待检测字符串
|
|
|
count 要检测的字符数量 为0时检测全部
|
|
|
*Output: NULL
|
|
|
*Return: double返回2 整数返回1, 其它返回0 参考EMStrType
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_str_type(const char* pstr, int count = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除一个字符串前后两头的特殊字符(逐字符比较)
|
|
|
*Intput: pbuff 待处理字符串
|
|
|
key 特殊字符数组
|
|
|
*Output: NULL
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI trim_char(char* pbuff, const char* key = " ");
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 将一段数据内容向前移动step个字节单位内存重新存储,必须保证指针有效性
|
|
|
*Intput: psrc 当前数据内容首地址
|
|
|
nsize 移动内容长度 -- 不能为0,若为字符串,nsize必须包含结束符
|
|
|
step 移动大小 -- 不能为0
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI mem_forward(void* psrc, unsigned int nsize, unsigned int step);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 将一段数据内容向后移动step个字节单位内存重新存储,必须保证指针有效性
|
|
|
*Intput: psrc 当前数据内容首地址
|
|
|
nsize 移动内容长度 -- 不能为0,若为字符串,nsize必须包含结束符
|
|
|
step 移动大小 -- 不能为0
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI mem_backward(void* psrc, unsigned int nsize, unsigned int step);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 查找一个字符串中有多少个指定的字符
|
|
|
*Intput: src 目标字符串
|
|
|
ch 指定字符
|
|
|
*Output: NULL
|
|
|
*Return: 返回查找到的指定字符个数
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_char_cnt(const char* src, char ch);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前exe/dll所在绝对路径
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前exe/dll所在绝对路径 不会为空
|
|
|
******************************************************/
|
|
|
EXPORT_C const char* WINAPI get_cur_path();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 切割字符串 功能类似于strtok
|
|
|
*Intput: src 目标字符串,_Context非空时,src可传入NULL
|
|
|
_Delim 分割字符串,字符串
|
|
|
*_Context 目标字符串,src非空时,*_Context无意义
|
|
|
*Output: _Context 切割后剩余的字符串地址指针
|
|
|
*Return: 返回切割后的字符串,没有另外申请内存,不需要释放
|
|
|
*与strtok的区别:
|
|
|
1. 当切割符出现在首部时,返回NULL,strtok会直到出现有效字符为止进行切割
|
|
|
2. _Delim是字符串全匹配模式,strtok是_Delim任意一个字节匹配就可以切割
|
|
|
******************************************************/
|
|
|
EXPORT_C char* WINAPI sys_strtok(char* src, const char* _Delim, char** _Context);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 拷贝目标字符串,直到结束或者找到指定字符
|
|
|
*Intput: src 目标字符串
|
|
|
dest待拷贝字符串
|
|
|
ch 指定字符
|
|
|
*Output: NULL
|
|
|
*Return: 返回结束的指针地址(src+strlen(dest)),指向0结束符
|
|
|
******************************************************/
|
|
|
EXPORT_C char* WINAPI comm_strcpy(char* src, const char* dest, char ch = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 拷贝指定数量目标字符串,直到结束或者找到指定字符
|
|
|
*Intput: src 目标字符串
|
|
|
dest待拷贝字符串
|
|
|
len 指定最多拷贝多少个字节 包含最后一个0结束符
|
|
|
ch 指定结束字符
|
|
|
*Output: NULL
|
|
|
*Return: 返回结束的指针地址(src+strlen(dest)),指向0结束符
|
|
|
******************************************************/
|
|
|
EXPORT_C char* WINAPI comm_strncpy(char* src, const char* dest, unsigned int len, char ch = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: double转换成int
|
|
|
*Intput: f 双精度类型double
|
|
|
*Output: NULL
|
|
|
*Return: 返回int值 预防整数出现0.9999999然后取整
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI double_to_int(double f);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 某个字符串中取N位转化成数字
|
|
|
*Intput: pstr 源字符串
|
|
|
ncount 取多少个字符
|
|
|
*Output: NULL
|
|
|
*Return: 返回int值,有非数字值时返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI atoni(const char* pstr, int ncount);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 比较日期1到日期2需要几天,格式:"20080902"
|
|
|
*Intput: date1 日期1
|
|
|
date2 日期2
|
|
|
*Output: NULL
|
|
|
*Return: 返回int值,有非数字值时返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI datecmp(const char* pdate1, const char* pdate2);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 分割一个全路径为路径+文件名
|
|
|
*Intput: fullPath 全路径名
|
|
|
*Output: szPath 文件所在路径
|
|
|
szFile 文件名,取决于全路径是否包含".",
|
|
|
若不包含则字符串为空
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI token_full_path(const char* fullPath, char* szPath = 0, char* szFile = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 检查一个IP地址是否合法
|
|
|
*Intput: lpIP ip地址字符串
|
|
|
*Output: NULL
|
|
|
*Return: ip地址合法返回1 不合法返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI chk_ipaddress(const char* lpIP);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 计算指定数据CRC32校验码
|
|
|
*Intput: src 目标数据
|
|
|
len 目标数据大小, 按字节算
|
|
|
*Output: NULL
|
|
|
*Return: 返回CRC32校验码
|
|
|
******************************************************/
|
|
|
EXPORT_C unsigned int WINAPI crc32(const void* src, int len);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 对指定字符串增加BCC校验码
|
|
|
*Intput: src 目标字符串
|
|
|
high 校验位高4位 -- 可以传NULL
|
|
|
low 校验位低4位 -- 可以传NULL
|
|
|
*Output: high,low
|
|
|
*Return: 返回增加BCC校验位后的字符串长度
|
|
|
*PS: 若high参数传入空,则会自动在字符串后面增加2个字节
|
|
|
的校验位,高位在前,低位在后.并返回字符串长度+2
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI bcc(char* src, char* high = 0, char* low = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 判断指定字符串BCC校验码是否正确
|
|
|
*Intput: src 目标字符串
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回1,失败返回0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI bcc_check(char* src);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 对字符串进行加密
|
|
|
*Intput: des 目标字符串
|
|
|
key 加密秘钥 -- 根据秘钥加密 最长16位
|
|
|
*Output: src -- 加密后的缓冲区//字符串
|
|
|
*Return: 返回加密后的字符串长度
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI encrypt_str(char *src, const char *des, const char *key);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 对已经加密的字符串进行解密
|
|
|
*Intput: des 目标字符串 -- 必须是32位的倍数
|
|
|
key 解密秘钥 -- 使用加密时用的秘钥 最长16位
|
|
|
*Output: src -- 解密后的缓冲区//字符串
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI decrypt_str(char *src, const char *des, const char *key);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 对一个32位整数进行加密
|
|
|
*Intput: des 要加密的数字
|
|
|
key 加密秘钥
|
|
|
*Output: NULL
|
|
|
*Return: 返回加密后的整数
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI encrypt_int(int des, int key = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 对已经加密的32位整数进行解密
|
|
|
*Intput: des 要解密的数字
|
|
|
key 解密秘钥 -- 使用加密时用的秘钥
|
|
|
*Output: NULL
|
|
|
*Return: 返回解密后的整数
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI decrypt_int(int des, int key = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 对一个8位整数进行加密
|
|
|
*Intput: des 要加密的数字
|
|
|
key 加密秘钥
|
|
|
*Output: NULL
|
|
|
*Return: 返回加密后的整数 -- 8位
|
|
|
******************************************************/
|
|
|
EXPORT_C unsigned char WINAPI encrypt_char(unsigned char des, unsigned char key = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 对已经加密的8位整数进行解密
|
|
|
*Intput: des 要解密的数字
|
|
|
key 解密秘钥 -- 使用加密时用的秘钥
|
|
|
*Output: NULL
|
|
|
*Return: 返回解密后的整数 -- 8位
|
|
|
******************************************************/
|
|
|
EXPORT_C unsigned char WINAPI decrypt_char(unsigned char des, unsigned char key = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化线程池
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI init_pool();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭线程池
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0 ,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI uninit_pool();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 使用线程池执行一个函数
|
|
|
*Intput: fun 函数地址
|
|
|
lparam 任意型指针
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回线程ID,失败返回错误码<0
|
|
|
*PS: 为了提高效率,线程池只是用来运行重复效率高,时间短的工作
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI pool_thread(PROCEX fun, void* lparam);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化timer线程
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI init_timer();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 关闭timer线程
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误码
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI deinit_timer();
|
|
|
|
|
|
//timer回调函数接口类型声明,使用公共计时器循环执行时,实现此接口并注册
|
|
|
/* tid -- 计时器ID
|
|
|
lparam -- 注册对象指针*/
|
|
|
typedef void (WINAPI *TimerFun)(int tid, void* lparam);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置一个timer定时器工作任务 -- 辅助主线程
|
|
|
*Intput: fun 回调接口
|
|
|
nElapse 运行间隔 > 0 && < 5000
|
|
|
lparam 回调附加参数
|
|
|
*Output: 无
|
|
|
*Return: 成功返回定时器ID>0,失败返回错误代码<0
|
|
|
PS: 自定义timer由子线程运行,若要更新UI,最好postmessage
|
|
|
到主窗口,否则可能会发生内存访问互斥
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI set_timer(TimerFun fun, int nElapse = 100, void* lparam = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 删除一个timer,所有timer删除完,线程才会退出
|
|
|
*Intput: tid 定时器ID
|
|
|
*Output: 无
|
|
|
*Return: NULL
|
|
|
******************************************************/
|
|
|
EXPORT_C void WINAPI kill_timer(int tid);
|
|
|
|
|
|
//注册底层消息机制
|
|
|
enum MessageType
|
|
|
{//消息类型
|
|
|
MSG_NORMAL = 0, //提示消息框 -- OK
|
|
|
MSG_SELECT, //选择消息框 -- 是+否
|
|
|
MSG_RETRY, //重试消息框 -- 重试+忽略+取消 / 自定义 备用
|
|
|
MSG_WARN, //警告消息框 -- OK
|
|
|
MSG_ERR, //错误消息框 -- OK
|
|
|
MSG_ASCII, //字符串消息
|
|
|
MSG_EXITSYS, //退出系统
|
|
|
MSG_RESTART, //重启系统
|
|
|
};
|
|
|
|
|
|
enum MessageResult
|
|
|
{//回调消息返回结果
|
|
|
IDR_OK = 0, //ok
|
|
|
IDR_CANCEL, //取消
|
|
|
IDR_ABORT, //忽略
|
|
|
IDR_RETRY, //重试
|
|
|
IDR_YES, //选择是
|
|
|
IDR_NO, //选择否
|
|
|
IDR_CUS, //自定义 备用
|
|
|
};
|
|
|
|
|
|
typedef MessageResult (WINAPI *FunMessageShow)(const char*, MessageType, void*);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 注册消息弹窗提示,注册后可显示底层提示消息,一般ui层注册
|
|
|
*Intput: fun 回调函数地址
|
|
|
param 附加参数
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0, 失败返回错误码
|
|
|
*PS: 在程序初始化时注册,支持最多注册两次,最后注册作为主要回调接口
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI regist_message(FunMessageShow fun, void* param);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 反注册消息弹窗提示,反注册后会返回到上一次注册状态
|
|
|
*Intput: fun 回调函数地址
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0, 失败返回错误码
|
|
|
*PS: 在程序退出时反注册,反注册时优先释放主要回调接口,使用备用接口
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI unregist_message(FunMessageShow fun);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 同步回调消息,注册后可接收,一般用于UI注册接收,底层发送
|
|
|
*Intput: type 消息类型 MessageType
|
|
|
pszFormat 提示消息内容或格式 长度<1024
|
|
|
... 可变参数
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回消息返回值(MessageResult),失败返回错误码(<0)
|
|
|
*PS: 支持多线程,内部包含线程保护,回调函数若有延时,将影响其它线程效率
|
|
|
*PS: 弹窗消息仅回调主要接口,其它消息回调所有接口
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI send_message(MessageType type, const char *pszFormat, ...);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 同步回调消息,注册后可接收,一般用于UI注册接收,底层发送
|
|
|
*Intput: type 消息类型 MessageType
|
|
|
pszmsg 提示消息内容
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回消息返回值(MessageResult),失败返回错误码(<0)
|
|
|
*PS: 支持多线程,内部包含线程保护,回调函数若有延时,将影响其它线程效率
|
|
|
*PS: 弹窗消息仅回调主要接口,其它消息回调所有接口
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI send_messages(MessageType type, const char *pszmsg = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 异步回调消息,注册后可接收,一般用于UI注册接收,底层发送
|
|
|
*Intput: type 消息类型 MessageType
|
|
|
pszFormat 提示消息内容或格式 长度<1024
|
|
|
... 可变参数
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回消息返回值(MessageResult),失败返回错误码(<0)
|
|
|
*PS: 支持多线程,内部包含线程保护,回调函数若有延时,将影响其它线程效率
|
|
|
*PS: 弹窗消息仅回调主要接口,其它消息回调所有接口
|
|
|
*PS: 异步模式需要确保线程池已经初始化(init_pool)
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI post_message(MessageType type, const char *pszFormat, ...);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 同步回调消息,注册后可接收,一般用于UI注册接收,底层发送
|
|
|
*Intput: type 消息类型 MessageType
|
|
|
pszmsg 提示消息内容
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回消息返回值(MessageResult),失败返回错误码(<0)
|
|
|
*PS: 支持多线程,内部包含线程保护,回调函数若有延时,将影响其它线程效率
|
|
|
*PS: 弹窗消息仅回调主要接口,其它消息回调所有接口
|
|
|
*PS: 异步模式需要确保线程池已经初始化(init_pool)
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI post_messages(MessageType type, const char *pszmsg = 0);
|
|
|
|
|
|
#endif
|