//----------------------------------------------------------------------------- // Microsoft OLE DB TABLECOPY Sample // Copyright (C) 1991-2000 Microsoft Corporation // // @doc // // @module COMMON.H // //----------------------------------------------------------------------------- #ifndef _COMMON_H_ #define _COMMON_H_ /////////////////////////////////////////////////////////////// // Includes // /////////////////////////////////////////////////////////////// #include "winmain.h" #include "strsafe.h" #include "oledb.h" #include "oledberr.h" #include "error.h" #include "tablecopy.h" /////////////////////////////////////////////////////////////// // Defines // /////////////////////////////////////////////////////////////// #define NUMELE(rgEle) (sizeof(rgEle) / sizeof(rgEle[0])) #define __WIDESTRING(str) L##str #define WIDESTRING(str) __WIDESTRING(str) //FindLeaks #ifdef _DEBUG #define DISP_FILE_LINE TRACE("File '%s', Line '%lu'\n", __FILE__, __LINE__) #else #define DISP_FILE_LINE #endif //_DEBUG //IMalloc Wrappers #define SAFE_ALLOC(pv, type, cb) { DISP_FILE_LINE; pv = (type*)CoTaskMemAlloc((cb)*sizeof(type)); CHECK_MEMORY(pv); } #define SAFE_REALLOC(pv, type, cb) { DISP_FILE_LINE; pv = (type*)CoTaskMemRealloc(pv, (cb)*sizeof(type)); CHECK_MEMORY(pv); } #define SAFE_SYSALLOC(pv, bstr) { pv = SysAllocString(bstr); CHECK_MEMORY(pv); } #define SAFE_FREE(pv) { CoTaskMemFree(pv); pv = NULL; } #define SAFE_SYSFREE(bstr) { SysFreeString(bstr); bstr = NULL; } //IUnknown->Release Wrapper #define SAFE_ADDREF(pv) if(pv) { ((IUnknown*)(pv))->AddRef(); } #define SAFE_RELEASE(pv) if(pv) { ((IUnknown*)(pv))->Release(); pv = NULL; } //Test macros #define CHECKC(exp) { if(!(exp)) { ASSERT(!#exp); goto CLEANUP; } } #define QTESTC(exp) { if(FAILED(exp)) goto CLEANUP; } #define XTEST(exp) { HRESULT Internalhr = exp; if(FAILED(Internalhr)) { DisplayAllErrors(NULL, Internalhr, WIDESTRING(__FILE__), __LINE__); }} #define XTESTC(exp) { HRESULT Internalhr = exp; if(FAILED(Internalhr)) { DisplayAllErrors(NULL, Internalhr, WIDESTRING(__FILE__), __LINE__); goto CLEANUP; }} /////////////////////////////////////////////////////////////////// // Accessor / Binding // /////////////////////////////////////////////////////////////////// #define ADJUST_SIZE(Size, MaxSize) ((Size) = min((Size), (MaxSize))) //STATUS helpers, for locating obStatus offsets in the bindings #define STATUS_IS_BOUND(Binding) ( Binding.dwPart & DBPART_STATUS ) #define BINDING_STATUS(Binding, pv) (*(ULONG*)((BYTE*)pv + Binding.obStatus)) //LENGTH helpers, for locating obLength offsets in the bindings #define LENGTH_IS_BOUND(Binding) ( Binding.dwPart & DBPART_LENGTH ) #define BINDING_LENGTH(Binding, pv) (*(ULONG*)((BYTE*)pv + Binding.obLength)) //VALUE helpers, for locating obValue offsets in the bindings #define VALUE_IS_BOUND(Binding) ( Binding.dwPart & DBPART_VALUE ) #define BINDING_VALUE(Binding, pv) (*(ULONG*)((BYTE*)pv + Binding.obValue )) //ROUNDUP on all platforms pointers must be aligned properly #define ROUNDUP_AMOUNT 8 #define ROUNDUP_(size,amount) (((DBBYTEOFFSET)(size)+((amount)-1))&~((DBBYTEOFFSET)(amount)-1)) #define ROUNDUP(size) ROUNDUP_(size, ROUNDUP_AMOUNT) BOOL FreeBindings(ULONG cBindings, DBBINDING* rgBindings); BOOL FreeBindingData(ULONG cBindings, DBBINDING* rgBindings, void* pData); //////////////////////////////////////////////////////////////////////////// // DBTYPE functions // //////////////////////////////////////////////////////////////////////////// BOOL IsFixedType(DBTYPE wType); BOOL IsVariableType(DBTYPE wType); BOOL IsNumericType(DBTYPE wType); WCHAR* GetDBTypeName(DBTYPE wType); BOOL GetPromotedType(DBTYPE* pwType); //////////////////////////////////////////////////////////////////////////// // OLEDB General Helper functions // //////////////////////////////////////////////////////////////////////////// ULONG GetCreateParams(WCHAR* pwszCreateParam); HRESULT ConvertToMBCS(WCHAR* pwsz, CHAR* psz, ULONG cbStrLen); HRESULT ConvertToWCHAR(CHAR* psz, WCHAR* pwsz, ULONG cbStrLen); WCHAR* wcsDuplicate(WCHAR* pwsz); /////////////////////////////////////////////////////////////// // Static Strings Messages // /////////////////////////////////////////////////////////////// //General Statss extern WCHAR wsz_OLEDB[]; extern WCHAR wsz_SUCCESS[]; extern WCHAR wsz_WARNING[]; extern WCHAR wsz_INFO[]; extern WCHAR wsz_ERROR[]; extern WCHAR wsz_CANCEL[]; extern WCHAR wsz_ERRORINFO[]; //Copying Status extern WCHAR wsz_COPYING[]; extern WCHAR wsz_COPIED_RECORDS[]; extern WCHAR wsz_COPY_SUCCESS[]; extern WCHAR wsz_COPY_FAILURE[]; extern WCHAR wsz_CANCEL_OP[]; extern WCHAR wsz_TYPEMAPPING_FAILURE[]; //Tables extern WCHAR wsz_CREATE_TABLE[]; extern WCHAR wsz_DROP_TABLE_[]; extern WCHAR wsz_ASK_DROP_TABLE_[]; extern WCHAR wsz_SAME_TABLE_NAME[]; extern WCHAR wsz_FROMTABLEHELP_[]; extern WCHAR wsz_FROMQUALTABLE_[]; extern WCHAR wsz_TOTABLEHELP_[]; //Indexes extern WCHAR wsz_CREATE_INDEX_[]; extern WCHAR wsz_UNIQUE_INDEX[]; extern WCHAR wsz_INDEX_DESC[]; extern WCHAR wsz_INDEX_FAILED_[]; //Columns extern WCHAR wsz_NO_TYPE_MATCH_[]; extern WCHAR wsz_NO_TYPE_FOUND_[]; extern WCHAR wsz_CONNECT_STRING_[]; extern WCHAR wsz_TYPES_STRING_[]; extern WCHAR wsz_NOT_CONNECTED[]; extern WCHAR wsz_PROVIDER_INFO_[]; extern WCHAR wsz_INVALID_VALUE_[]; extern WCHAR wsz_READONLY_DATASOURCE_[]; //Query extern WCHAR wsz_SHOW_SQL_[]; extern WCHAR wsz_SELECT[]; extern WCHAR wsz_FROM[]; extern WCHAR wsz_BOGUS_WHERE[]; extern WCHAR wsz_INSERT_INTO[]; extern WCHAR wsz_VALUES_CLAUSE[]; extern WCHAR wsz_PARAM[]; extern WCHAR wsz_PRIMARY_KEY[]; //General String Values extern WCHAR wsz_COMMA[]; extern WCHAR wsz_LPAREN[]; extern WCHAR wsz_RPAREN[]; extern WCHAR wsz_SPACE[]; extern WCHAR wsz_PERIOD[]; #define EOL L'\0' #define SPACE L' ' #define UNDERSCORE L'_' #endif //_COMMON_H_