home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / oledb / tablecopy / common.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-12  |  6.1 KB  |  189 lines

  1. //-----------------------------------------------------------------------------
  2. // Microsoft OLE DB TABLECOPY Sample
  3. // Copyright (C) 1995-1998 Microsoft Corporation
  4. //
  5. // @doc
  6. //
  7. // @module COMMON.H
  8. //
  9. //-----------------------------------------------------------------------------
  10.  
  11. #ifndef _COMMON_H_
  12. #define _COMMON_H_
  13.  
  14.  
  15. ///////////////////////////////////////////////////////////////
  16. // Includes
  17. //
  18. ///////////////////////////////////////////////////////////////
  19. #include "winmain.h"
  20.  
  21. #include "oledb.h"
  22. #include "oledberr.h"
  23.  
  24. #include "error.h"
  25. #include "tablecopy.h"
  26.  
  27.  
  28. ///////////////////////////////////////////////////////////////
  29. // Defines
  30. //
  31. ///////////////////////////////////////////////////////////////
  32. #define NUMELE(rgEle) (sizeof(rgEle) / sizeof(rgEle[0]))
  33. #define __WIDESTRING(str) L##str
  34. #define WIDESTRING(str) __WIDESTRING(str)
  35.  
  36. //FindLeaks
  37. #ifdef _DEBUG
  38. #define DISP_FILE_LINE    TRACE("File '%s', Line '%lu'\n", __FILE__, __LINE__)
  39. #else
  40. #define DISP_FILE_LINE
  41. #endif //_DEBUG
  42.  
  43. //IMalloc Wrappers
  44. #define SAFE_ALLOC(pv, type, cb)    { DISP_FILE_LINE; pv = (type*)CoTaskMemAlloc((cb)*sizeof(type)); CHECK_MEMORY(pv);            }
  45. #define SAFE_REALLOC(pv, type, cb)    { DISP_FILE_LINE; pv = (type*)CoTaskMemRealloc(pv, (cb)*sizeof(type)); CHECK_MEMORY(pv);    }
  46. #define SAFE_SYSALLOC(pv, bstr)        { pv = SysAllocString(bstr); CHECK_MEMORY(pv);                                                }        
  47.  
  48. #define SAFE_FREE(pv)                { CoTaskMemFree(pv); pv = NULL;                        }
  49. #define SAFE_SYSFREE(bstr)            { SysFreeString(bstr); bstr = NULL;                    }
  50.  
  51. //IUnknown->Release Wrapper
  52. #define SAFE_ADDREF(pv)                if(pv) { ((IUnknown*)(pv))->AddRef();                }
  53. #define SAFE_RELEASE(pv)            if(pv) { ((IUnknown*)(pv))->Release(); pv = NULL;    }  
  54.                                                                                                     
  55. //Test macros                                                                                    
  56. #define CHECKC(exp)                    { if(!(exp)) { ASSERT(!#exp); goto CLEANUP;            } }
  57. #define QTESTC(exp)                    { if(FAILED(exp)) goto CLEANUP;                        }
  58.  
  59. #define XTEST(exp)                    { HRESULT Internalhr = exp;    if(FAILED(Internalhr)) { DisplayAllErrors(NULL, Internalhr, WIDESTRING(__FILE__), __LINE__); }}
  60. #define XTESTC(exp)                    { HRESULT Internalhr = exp;    if(FAILED(Internalhr)) { DisplayAllErrors(NULL, Internalhr, WIDESTRING(__FILE__), __LINE__); goto CLEANUP; }}
  61.  
  62.  
  63.  
  64. ///////////////////////////////////////////////////////////////////
  65. // Accessor / Binding 
  66. //
  67. ///////////////////////////////////////////////////////////////////
  68. #define ADJUST_SIZE(Size, MaxSize)  ((Size) = min((Size), (MaxSize)))
  69.  
  70. //STATUS helpers, for locating obStatus offsets in the bindings
  71. #define STATUS_IS_BOUND(Binding)    ( Binding.dwPart & DBPART_STATUS )
  72. #define BINDING_STATUS(Binding, pv) (*(ULONG*)((BYTE*)pv + Binding.obStatus))
  73.  
  74. //LENGTH helpers, for locating obLength offsets in the bindings
  75. #define LENGTH_IS_BOUND(Binding)    ( Binding.dwPart & DBPART_LENGTH )
  76. #define BINDING_LENGTH(Binding, pv) (*(ULONG*)((BYTE*)pv + Binding.obLength))
  77.  
  78. //VALUE helpers, for locating obValue offsets in the bindings
  79. #define VALUE_IS_BOUND(Binding)     ( Binding.dwPart & DBPART_VALUE )
  80. #define BINDING_VALUE(Binding, pv)  (*(ULONG*)((BYTE*)pv + Binding.obValue ))
  81.  
  82. //ROUNDUP on all platforms pointers must be aligned properly
  83. #define ROUNDUP_AMOUNT    8
  84. #define ROUNDUP_(size,amount)        (((ULONG)(size)+((amount)-1))&~((amount)-1))
  85. #define ROUNDUP(size)                ROUNDUP_(size, ROUNDUP_AMOUNT)
  86.  
  87. BOOL FreeBindings(ULONG cBindings, DBBINDING* rgBindings);
  88. BOOL FreeBindingData(ULONG cBindings, DBBINDING* rgBindings, void* pData);
  89.  
  90.  
  91.  
  92. ////////////////////////////////////////////////////////////////////////////
  93. // DBTYPE functions
  94. //
  95. ////////////////////////////////////////////////////////////////////////////
  96. BOOL IsFixedType(DBTYPE wType);
  97. BOOL IsVariableType(DBTYPE wType);
  98. BOOL IsNumericType(DBTYPE wType);
  99.  
  100. WCHAR* GetDBTypeName(DBTYPE wType);
  101. BOOL GetPromotedType(DBTYPE* pwType);
  102.               
  103.  
  104.  
  105. ////////////////////////////////////////////////////////////////////////////
  106. // OLEDB General Helper functions
  107. //
  108. ////////////////////////////////////////////////////////////////////////////
  109. ULONG GetCreateParams(WCHAR* pwszCreateParam);
  110.  
  111. HRESULT ConvertToMBCS(WCHAR* pwsz, CHAR* psz, ULONG cbStrLen);
  112. HRESULT ConvertToWCHAR(CHAR* psz, WCHAR* pwsz, ULONG cbStrLen);
  113. WCHAR* wcsDuplicate(WCHAR* pwsz);
  114.  
  115.  
  116. ///////////////////////////////////////////////////////////////
  117. // Static Strings Messages
  118. //
  119. ///////////////////////////////////////////////////////////////
  120.  
  121. //General Statss
  122. extern WCHAR wsz_OLEDB[];                
  123. extern WCHAR wsz_SUCCESS[];                
  124. extern WCHAR wsz_WARNING[];                
  125. extern WCHAR wsz_INFO[];
  126. extern WCHAR wsz_ERROR[];                
  127. extern WCHAR wsz_CANCEL[];                
  128. extern WCHAR wsz_ERRORINFO[];            
  129.                                  
  130. //Copying Status
  131. extern WCHAR wsz_COPYING[];                 
  132. extern WCHAR wsz_COPIED_RECORDS[];        
  133. extern WCHAR wsz_COPY_SUCCESS[];            
  134. extern WCHAR wsz_COPY_FAILURE[];            
  135. extern WCHAR wsz_CANCEL_OP[];            
  136. extern WCHAR wsz_TYPEMAPPING_FAILURE[];
  137.  
  138. //Tables
  139. extern WCHAR wsz_CREATE_TABLE[];            
  140. extern WCHAR wsz_DROP_TABLE_[];            
  141. extern WCHAR wsz_ASK_DROP_TABLE_[];            
  142. extern WCHAR wsz_SAME_TABLE_NAME[];
  143. extern WCHAR wsz_FROMTABLEHELP_[];
  144. extern WCHAR wsz_FROMQUALTABLE_[];
  145. extern WCHAR wsz_TOTABLEHELP_[];
  146.  
  147. //Indexes
  148. extern WCHAR wsz_CREATE_INDEX_[];        
  149. extern WCHAR wsz_UNIQUE_INDEX[];            
  150. extern WCHAR wsz_INDEX_DESC[];             
  151. extern WCHAR wsz_INDEX_FAILED_[];        
  152.  
  153. //Columns
  154. extern WCHAR wsz_NO_TYPE_MATCH_[];        
  155. extern WCHAR wsz_NO_TYPE_FOUND_[];        
  156.  
  157. extern WCHAR wsz_CONNECT_STRING_[];
  158. extern WCHAR wsz_TYPES_STRING_[];
  159. extern WCHAR wsz_NOT_CONNECTED[];
  160.  
  161. extern WCHAR wsz_PROVIDER_INFO_[];
  162.  
  163. extern WCHAR wsz_INVALID_VALUE_[];    
  164. extern WCHAR wsz_READONLY_DATASOURCE_[];    
  165.  
  166. //Query
  167. extern WCHAR wsz_SHOW_SQL_[];
  168. extern WCHAR wsz_SELECT[];                
  169. extern WCHAR wsz_FROM[];                    
  170. extern WCHAR wsz_BOGUS_WHERE[];            
  171. extern WCHAR wsz_INSERT_INTO[];            
  172. extern WCHAR wsz_VALUES_CLAUSE[];        
  173. extern WCHAR wsz_PARAM[];                
  174. extern WCHAR wsz_PRIMARY_KEY[];
  175.  
  176. //General String Values
  177. extern WCHAR wsz_COMMA[];                
  178. extern WCHAR wsz_LPAREN[];                
  179. extern WCHAR wsz_RPAREN[];                
  180. extern WCHAR wsz_SPACE[];                
  181. extern WCHAR wsz_PERIOD[];                
  182.  
  183. #define EOL            L'\0'
  184. #define SPACE        L' '
  185. #define UNDERSCORE    L'_'
  186.  
  187.  
  188. #endif //_COMMON_H_
  189.