UTIL.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // util.h - shared utilities
  2. //
  3. // This is a part of the Active Template Library.
  4. // Copyright (C) 1996-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Active Template Library Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Active Template Library product.
  12. #ifndef __Util_h__
  13. #define __Util_h__
  14. #include <assert.h>
  15. // Displays a message box with an error string in it.
  16. void ErrorMessage(LPCTSTR str, HRESULT hr) ;
  17. // Determine if two interfaces below to the same component.
  18. BOOL InterfacesAreOnSameComponent(IUnknown* pI1, IUnknown* pI2) ;
  19. // Displays messages using OutputDebugString
  20. void __cdecl MyTrace(LPCTSTR lpszFormat, ...);
  21. // Determine if an address is accessable.
  22. BOOL IsValidAddress(const void* lp, UINT nBytes = 1, BOOL bReadWrite = FALSE) ;
  23. // Determine if interface pointer is accessable.
  24. inline BOOL IsValidInterface(IUnknown* p)
  25. {
  26. return (p != NULL) && IsValidAddress(p, sizeof(IUnknown*), FALSE) ;
  27. }
  28. // Determine if the out parameter for an interface pointer is accessable.
  29. template <class T>
  30. inline BOOL IsValidInterfaceOutParam(T** p)
  31. {
  32. return (p != NULL) && IsValidAddress(p, sizeof(IUnknown*), TRUE) ;
  33. }
  34. /////////////////////////////////////////////////////////////////////////////
  35. // Diagnostic support
  36. // Helper function for checking HRESULTs.
  37. #ifdef _DEBUG
  38. inline void CheckResult(HRESULT hr)
  39. {
  40. if (FAILED(hr))
  41. {
  42. ErrorMessage(NULL, hr) ;
  43. assert(FAILED(hr)) ;
  44. }
  45. }
  46. #define ASSERT_HRESULT      CheckResult
  47. #else
  48. #define ASSERT_HRESULT
  49. #endif
  50. /////////////////////////////////////////////////////////////////////////////
  51. // More Diagnostic support which mimics MFC
  52. #ifndef __AFX_H__   // Only define these if MFC has not already been included
  53. #ifdef _DEBUG
  54. #define ASSERT              assert
  55. #define VERIFY(f)           ASSERT(f)
  56. #define DEBUG_ONLY(f)       (f)
  57. #define TRACE               ::MyTrace
  58. #define TRACE0(sz)          ::MyTrace(_T("%s"), _T(sz))
  59. #else   // _DEBUG
  60. #define ASSERT
  61. #define VERIFY(f)           ((void)(f))
  62. #define ASSERT_VALID(pOb)   ((void)0)
  63. #define DEBUG_ONLY(f)       ((void)0)
  64. #define TRACE
  65. #define TRACE0(sz)
  66. #endif // !_DEBUG
  67. #define ASSERT_POINTER(p, type) 
  68. ASSERT(((p) != NULL) && IsValidAddress((p), sizeof(type), FALSE))
  69. #define ASSERT_NULL_OR_POINTER(p, type) 
  70. ASSERT(((p) == NULL) || IsValidAddress((p), sizeof(type), FALSE))
  71. #endif // TRACE
  72. #endif // __Util_h__