www.pudn.com > SMS.rar > global.h
/* Filename : global.h */
#pragma once
#ifndef DLL_INTERNAL
#ifdef WINCE
#define DLL_INTERNAL
#else
#define DLL_INTERNAL __declspec( dllexport )
#endif
#endif
#pragma warning(once:4996) // 4996编译时的警告信息仅显示一个
//==========================================================================
// 常用操作宏
//==========================================================================
#define COUNT(x) sizeof(x)/sizeof(x[0])
#define MIN(x,y) (((DWORD)(x)<(DWORD)(y))?(x):(y))
#define MAX(x,y) (((DWORD)(x)>(DWORD)(y))?(x):(y))
#define ASSERT_ADDRESS(p,size) ASSERT((p)!=NULL && AfxIsValidAddress((p),(size),TRUE))
#define GET_SAFE_STRING(str) ( (str)?(str):_T("") )
#define GETFILESIZE(fad) (( (fad).nFileSizeHigh << sizeof(DWORD) ) | (fad).nFileSizeLow)
// 开关标志是否“置位”了
#define SWITCH_IS_FLAG(nConstFlag,nValue) ( ( (nConstFlag) & (nValue) ) == (nConstFlag) )
// strncat 函数
#ifdef UNICODE
#define strncat_hw wcsncat
#else
#define strncat_hw strncat
#endif
// strrchr 函数
#ifdef UNICODE
#define strrchr_hw wcsrchr
#else
#define strrchr_hw strrchr
#endif
// strchr 函数
#ifdef UNICODE
#define strchr_hw wcschr
#else
#define strchr_hw strchr
#endif
// strstr 函数
#ifdef UNICODE
#define strstr_hw wcsstr
#else
#define strstr_hw strstr
#endif
// sscanf 函数
#ifdef UNICODE
#define sscanf_hw swscanf
#else
#define sscanf_hw sscanf
#endif
// _vsnprintf 函数
#ifdef UNICODE
#define _vsnprintf_hw _vsnwprintf
#else
#define _vsnprintf_hw _vsnprintf
#endif
// sprintf 函数
#ifdef UNICODE
#define sprintf_hw swprintf
#else
#define sprintf_hw sprintf
#endif
// _snprintf 函数
#ifdef UNICODE
#define _snprintf_hw _snwprintf
#else
#define _snprintf_hw _snprintf
#endif
// strtok 函数
#ifdef UNICODE
#define strtok_hw wcstok
#else
#define strtok_hw strtok
#endif
// 句柄是否有效
#define HANDLE_IS_VALID(h) ( (HANDLE)(h!=NULL) && (HANDLE)(h) != INVALID_HANDLE_VALUE )
// 关闭句柄
#define SAFE_CLOSE_HANDLE(h)\
{\
if ( HANDLE_IS_VALID ( h ) )\
{\
CloseHandle ( h );\
h = NULL;\
}\
}
// 等待事件的 Sleep() 函数
#define SLEEP_RETURN(x)\
{\
if ( ::WaitForSingleObject ( m_hEvtEndModule, x ) == WAIT_OBJECT_0 )\
return FALSE;\
}
#define SLEEP_BREAK(x)\
{\
if ( ::WaitForSingleObject ( m_hEvtEndModule, x ) == WAIT_OBJECT_0 )\
break;\
}
// 删除一个数组指针
#define DELETE_ARRAY(pp)\
{\
if ( (pp) && (*(pp)) )\
{\
(*(pp))->RemoveAll();\
(*(pp))->FreeExtra();\
delete (*(pp));\
(*(pp)) = NULL;\
}\
}
// 删除所有由 new 申请的内存空间,可以是对象,也可以是普通的数据类型,如int、char等
#define DELETE_HEAP(pp)\
{\
if ( (pp) && (*(pp)) )\
{\
delete (*(pp));\
(*(pp)) = NULL;\
}\
}
// 错误类型
typedef enum _enum_error_type
{
ENUM_ERROR_TYPE_SUCCESS, // 操作成功,没有错误
ENUM_ERROR_TYPE_INVALID_DATA, // 无效的数据
ENUM_ERROR_TYPE_NoneMobile, // 没接手机
ENUM_ERROR_TYPE_NotInitialized, // 未初始化
ENUM_ERROR_TYPE_MobileEnable, // 手机模块被启用
ENUM_ERROR_TYPE_MobileDisable, // 手机模块被禁用
ENUM_ERROR_TYPE_OverSMSCountPerSIM, // 超过每张SIM卡发送短信的条数
ENUM_ERROR_TYPE_PARAMETER, // 参数错误
ENUM_ERROR_TYPE_ConfigNotRight, // 配置不正确
ENUM_ERROR_TYPE_BufferQueueFill, // 缓冲队列满
ENUM_ERROR_TYPE_SendSMSFailed, // 发送手机短信失败
ENUM_ERROR_TYPE_SysTerminate, // 系统将要终止
ENUM_ERROR_TYPE_IsNotMobileNO, // 不是手机号码
ENUM_ERROR_TYPE_NUM, // 错误类型数量
} ENUM_ERROR_TYPE;
//
// 全局消息
//
enum
{
WM_SCAN_BLUETOOTH_DEVICE_FINISHED = WM_USER+0x1000,
WM_SHOWLOG,
WM_REG_SEARCH,
WM_EXIT_MYSELF,
WM_SHOW_MAIN_WINDOW,
};
// RDTP 协议的版本号
#define RDTPVERSION _T("RDTP/1.0")
// 回应客户端的代码
#define RESPONSE_CODE_OK 200 // OK
#define RESPONSE_CODE_AUTHENTICATION_FAIL 101 // 身份验证失败
#define RESPONSE_CODE_SUBMITDATA_FAIL 102 // 提交数据给WebService失败
#define RESPONSE_CODE_GETDIAGNOSEINFO_ERROR 103 // 获取诊断信息发生错误
#define RESPONSE_CODE_UNKNOWNVERB 104 // 无法识别的动词
#define RESPONSE_CODE_PROTOCOLERROR 105 // 通信协议错误
#define RESPONSE_CODE_INNERERROR 106 // 程序内部发生错误
template
int FindFromStaticArray ( IN T *pAry, IN int nArySize, IN T Find )
{
if ( !pAry ) return -1;
for ( int i=0; i
int FindFromArray ( IN T1 &Ary, IN T2 Find )
{
int nCount = (int)Ary.GetSize();
for ( int i=0; i
int FindFromArray ( IN T1 &Ary_Org, IN T1 &Ary_Find, OUT T2 &Element )
{
int nCount = Ary_Find.GetSize();
for ( int i=0; i= 0 )
{
Element = Ary_Org.GetAt ( nFindPos );
return nFindPos;
}
}
return -1;
}
template
int FindFromArray ( IN T1 &Ary, IN T2 Find, IN T3 &AppAry, IN T4 AppFind )
{
int nCount = Ary.GetSize();
for ( int i=0; i
int FindFromArray ( IN T1 &Ary_Src, IN T1 &Ary_Find )
{
int nCount = Ary_Src.GetSize();
for ( int i=0; i= 0 )
return i;
}
return -1;
}
extern const TCHAR *g_pErrorTypeDesc[];