⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinyhelp.h

📁 将ORACLE数据库结构导出为自定义XML文件,支持整库导出,支持SDE空间库脚本导出
💻 H
字号:
#ifndef TINY_HELP_H
#define TINY_HELP_H

#include <assert.h>

//==========================
//为使代码简洁而使用的一些宏
//==========================

//等于某值时返回
/*
if(ptr == NULL)
{
return;
}
=>
RETURN(ptr,NULL)

*/

/*得到原始数组的长度*/
#define COUNTOF(x) (sizeof(x) / sizeof(x[0]))

//指针为空时返回
#define NULL_RETURN(ptr)\
	if (ptr ==NULL)	{\
	return;\
	}
	
//指针为空时返回指定值
#define NULL_RETURN_EX(ptr,rlt)\
	if (ptr ==NULL)	{\
	return rlt;\
	}

#define RETURN(T)\
	if (T)	{\
	return ;\
	}

#define RETURN_EX(T,rlt)\
	if (T)	{\
	return rlt;\
	}

//是否为有效的variant类型
inline bool ValidateVariant(_variant_t & var)
{
	if(var.vt==VT_EMPTY ||var.vt==VT_NULL)
		return false;
	else
		return true;	
}

//是否为有效的CString类型
inline bool ValidateString(CString & str)
{
	if (str.Trim().IsEmpty())	
		return false;	
	else	
		return true;	
}

inline BOOL V2S(const _variant_t &vtValue,CString &sRet)
{
	sRet = _T("");

	if((vtValue.vt != VT_NULL) && (vtValue.vt != VT_EMPTY))
	{
		sRet = (LPCTSTR)(_bstr_t)vtValue;
		return TRUE;
	}

	return FALSE;
}

inline CString V2S(const _variant_t &var)
{
	CString sInfo =  _T("");	

	switch(var.vt)   
	{   
	case VT_I2:
		sInfo.Format(_T("%d"),V_I2(&var));
		break;		//短整型  
	case VT_I4:
		sInfo.Format(_T("%ld"),V_I4(&var));
		break;		//长整型 
	case VT_R4:		//浮点型 
	case VT_R8:		//双精度型 
		sInfo.Format(_T("%f"),V_R8(&var));
		break;  
	case VT_BSTR:	//字符型
		sInfo = (LPCTSTR)(_bstr_t)var;
		break;
#ifdef ___ATLCOMTIME_H__
	case VT_DATE:
		{
			COleDateTime time = var;
			sInfo.Format("%d-%d-%d",time.GetYear(),time.GetMonth(),time.GetDay());
		}
		break;
#endif
	
	default:break;   
	} 

	return sInfo;
}

inline  DOUBLE V2D(_variant_t vtValue)
{
	DOUBLE dRet = 0.00;

	if((vtValue.vt != VT_NULL) && (vtValue.vt != VT_EMPTY))
	{
		try
		{
			dRet = (DOUBLE)vtValue;
		}
		catch (_com_error &e)
		{
			ATLTRACE("\nV2D::%s\n",(LPCTSTR)e.Description());
		}		
	}

	return dRet;
}

inline  BOOL V2L(_variant_t vtValue,LONG &lRet)
{
	lRet = -1;

	if((vtValue.vt != VT_NULL) && (vtValue.vt != VT_EMPTY))
	{
		try
		{
			lRet = (LONG)vtValue;
		}
		catch (_com_error &e)
		{
			ATLTRACE("\nV2L::%s\n",(LPCTSTR)e.Description());
		}

		return TRUE;
	}

	return FALSE;	
}

inline  long V2L(_variant_t vtValue)
{
	long lRet = -1;
	
	if((vtValue.vt != VT_NULL) && (vtValue.vt != VT_EMPTY))
	{
		try
		{
			lRet = (LONG)vtValue;
		}
		catch (_com_error &e)
		{
			ATLTRACE("\nV2L::%s\n",(LPCTSTR)e.Description());
		}		
	}

	return lRet;	
}

#if defined(_WINDOWS_) && defined(__cplusplus) 

//ATL中使用的等待光标
inline void ATLBeginWaitCursor(void) {
	HCURSOR cur = reinterpret_cast< HCURSOR >(::LoadCursor( NULL, MAKEINTRESOURCE( IDC_WAIT ) ));
	if ( NULL == cur ) {
		assert( FALSE && _T("Call BeginWaitCursor Failed") );		
	}

	HCURSOR hSetOK = ::SetCursor( cur );	
}

inline void ATLEndWaitCursor(void) {
	HCURSOR cur = reinterpret_cast< HCURSOR >(::LoadCursor( NULL, MAKEINTRESOURCE( IDC_ARROW ) ));
	if ( NULL == cur ) {
		assert( FALSE && _T("Call EndWaitCursor Failed "));		
	}

	::DestroyCursor( ::SetCursor( cur ) );	
}

class CATLWaitCursor
{
public:
	CATLWaitCursor(){ATLBeginWaitCursor();}
	~CATLWaitCursor(){ATLEndWaitCursor();}
};

#ifdef _DEBUG
#define TRY_AT_DEBUG() \
    try {

#define CATCH_COM_ERROR_AT_DEBUG(msg_header, notify) \
}\
    catch (_com_error & err) {\
    _bstr_t a = err.Description();\
    _bstr_t b = err.ErrorMessage();\
    TCHAR buf[BUFSIZ] = _T("");\
    _stprintf(buf, _T("\r\n%s!! Error Description = [%s] ; \r\nError Message = [%s]"), (msg_header),(const TCHAR *)a, (const TCHAR *)b);\
    OutputDebugString(buf);\
    \
    if ((notify))\
    {\
        TCHAR * msg = buf;\
        ::MessageBox(0, buf, _T("something wrong!~"), MB_OK);\
    }\
}\

#else
#define  TRY_AT_DEBUG()
#define  CATCH_COM_ERROR_AT_DEBUG(msg_header, notify)
#endif


#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -