home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / ocfinc.pak / OCDEFS.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  6KB  |  180 lines

  1. //
  2. //----------------------------------------------------------------------------
  3. // ObjectComponents
  4. // (C) Copyright 1994 by Borland International, All Rights Reserved
  5. //
  6. //   ObjectComponents fundamental definitions
  7. //----------------------------------------------------------------------------
  8. #if !defined(OCF_OCDEFS_H)
  9. #define OCF_OCDEFS_H
  10.  
  11. //
  12. // We must use all libraries as DLLs if we are using OCF as a DLL
  13. //
  14. // Define _OCFDLL with -WSE (-WE for 32bit) to use BIDS & RTL in dlls.
  15. //
  16. // Be sure _BUILDOCFDLL is defined when building an actual OCF dll
  17. //
  18. #if defined(_OCFDLL) || defined(_BUILDOCFDLL)
  19. #  if !defined(_OCFDLL)
  20. #    define _OCFDLL
  21. #  endif
  22. #  if !defined(_BIDSDLL)
  23. #    define _BIDSDLL
  24. #  endif
  25. #  if !defined(_RTLDLL)
  26. #    define _RTLDLL
  27. #  endif
  28. #endif
  29.  
  30. //
  31. // Define macros for OCF class, data & functions modifiers
  32. //
  33. #if defined(_FASTTHIS) && !defined(__FLAT__)
  34. #  define _OCFFASTTHIS __fastthis
  35. #else
  36. #  define _OCFFASTTHIS
  37. #endif
  38. #if defined(_BUILDOCFDLL)
  39. #  define _OCFCLASS     _OCFFASTTHIS  __export
  40. #  define _OCFDATA      __export
  41. #  define _OCFFUNC      __export
  42. #elif defined(_OCFDLL)
  43. #  define _OCFCLASS     _OCFFASTTHIS  __import
  44. #  if defined(__FLAT__)
  45. #    define _OCFDATA      __import
  46. #    define _OCFFUNC      __import
  47. #  else
  48. #    define _OCFDATA
  49. #    define _OCFFUNC
  50. #  endif
  51. #else
  52. #  if defined(__FLAT__)
  53. #    define _OCFCLASS
  54. #  else
  55. #    define _OCFCLASS     _OCFFASTTHIS __huge  // _ICLASS
  56. #  endif
  57. #  define _OCFDATA
  58. #  define _OCFFUNC
  59. #endif
  60.  
  61. #define INC_OLE2  // make sure windows.h (via defs.h) gets ole2, not ole1
  62.  
  63. #if !defined(OSL_DEFS_H)
  64. # include <osl/defs.h>
  65. #endif
  66. #if !defined(__SYSTYPES_H)
  67. # include <systypes.h>    // int8, int16, etc.
  68. #endif
  69. #if !defined(__CSTRING_H)
  70. # include <cstring.h>     // string class
  71. #endif
  72. #if !defined(__CHECKS_H)
  73. # include <checks.h>      // diag macros (PRECONDITION, CHECK, WARN, TRACE)
  74. #endif
  75. #if !defined(OSL_EXCEPT_H)
  76. # include <osl/except.h>
  77. #endif
  78. #if !defined(OCF_OLEUTIL_H)
  79. # include <ocf/oleutil.h>
  80. #endif
  81.  
  82. //
  83. // Useful HRESULT constants and test functions
  84. //
  85. #define HR_NOERROR             NOERROR
  86. #define HR_OK                  ResultFromScode(S_OK)  // same as NOERROR
  87. #define HR_FALSE               ResultFromScode(S_FALSE)
  88. #define HR_NOTIMPL             ResultFromScode(E_NOTIMPL)
  89. #define HR_OUTOFMEMORY         ResultFromScode(E_OUTOFMEMORY)
  90. #define HR_INVALIDARG          ResultFromScode(E_INVALIDARG)
  91. #define HR_NOINTERFACE         ResultFromScode(E_NOINTERFACE)
  92. #define HR_POINTER             ResultFromScode(E_POINTER)
  93. #define HR_HANDLE              ResultFromScode(E_HANDLE)
  94. #define HR_ABORT               ResultFromScode(E_ABORT)
  95. #define HR_FAIL                ResultFromScode(E_FAIL)
  96.  
  97. #define HR_CLASS_NOAGGREGATION ResultFromScode(CLASS_E_NOAGGREGATION)
  98. #define HR_CLASS_CLASSNOTAVAILABLE ResultFromScode(CLASS_E_CLASSNOTAVAILABLE)
  99.  
  100. #define HR_DISP_MEMBERNOTFOUND ResultFromScode(DISP_E_MEMBERNOTFOUND)
  101. #define HR_DISP_BADPARAMCOUNT  ResultFromScode(DISP_E_BADPARAMCOUNT)
  102. #define HR_DISP_BADVARTYPE     ResultFromScode(DISP_E_BADVARTYPE)
  103. #define HR_DISP_OVERFLOW       ResultFromScode(DISP_E_OVERFLOW)
  104. #define HR_DISP_TYPEMISMATCH   ResultFromScode(DISP_E_TYPEMISMATCH)
  105. #define HR_DISP_PARAMNOTFOUND  ResultFromScode(DISP_E_PARAMNOTFOUND)
  106. #define HR_DISP_PARAMNOTOPTIONAL ResultFromScode(DISP_E_PARAMNOTOPTIONAL)
  107. #define HR_DISP_EXCEPTION      ResultFromScode(DISP_E_EXCEPTION)
  108. #define HR_DISP_OVERFLOW       ResultFromScode(DISP_E_OVERFLOW)
  109. #define HR_DISP_UNKNOWNINTERFACE ResultFromScode(DISP_E_UNKNOWNINTERFACE)
  110. #define HR_DISP_UNKNOWNNAME    ResultFromScode(DISP_E_UNKNOWNNAME)
  111.  
  112. #define HR_TYPE_INVALIDSTATE   ResultFromScode(TYPE_E_INVALIDSTATE)
  113. #define HR_TYPE_WRONGTYPEKIND  ResultFromScode(TYPE_E_WRONGTYPEKIND)
  114. #define HR_TYPE_LIBNOTREGISTERED ResultFromScode(TYPE_E_LIBNOTREGISTERED)
  115. #define HR_TYPE_ELEMENTNOTFOUND ResultFromScode(TYPE_E_ELEMENTNOTFOUND)
  116. #define HR_TYPE_UNSUPFORMAT    ResultFromScode(TYPE_E_UNSUPFORMAT)
  117.  
  118. #define HR_DATA_FORMATETC      ResultFromScode(DATA_E_FORMATETC)
  119. #define HR_DV_FORMATETC        ResultFromScode(DV_E_FORMATETC)
  120. #define HR_DATA_SAMEFORMATETC  ResultFromScode(DATA_S_SAMEFORMATETC)
  121.  
  122. #define HR_MK_NOOBJECT         ResultFromScode(MK_E_NOOBJECT)
  123. #define HR_MK_NOSTORAGE        ResultFromScode(MK_E_NOSTORAGE)
  124. #define HR_MK_UNAVAILABLE      ResultFromScode(MK_E_UNAVAILABLE)
  125.  
  126. #define HR_OLE_STATIC          ResultFromScode(OLE_E_STATIC)
  127. #define HR_OLE_NOT_INPLACEACTIVE ResultFromScode(OLE_E_NOT_INPLACEACTIVE)
  128. #define HR_OLEOBJ_INVALIDVERB  ResultFromScode(OLEOBJ_S_INVALIDVERB)
  129. #define HR_OLE_USEREG          ResultFromScode(OLE_S_USEREG)
  130.  
  131. #define HR_RPC_CALL_REJECTED   ResultFromScode(RPC_E_CALL_REJECTED)
  132. #define HR_STG_CANTSAVE        ResultFromScode(STG_E_CANTSAVE)
  133.  
  134. // Return result codes based on bool expression
  135. //
  136. inline HRESULT HRFailIfZero(int bexpr) {return bexpr ? HR_NOERROR : HR_FAIL;}
  137. inline HRESULT HRFalseIfZero(int bexpr) {return bexpr ? HR_OK : HR_FALSE;}
  138.  
  139. // Return bool based on hresult test
  140. //
  141. inline bool HRSucceeded(HRESULT hr) {return static_cast<bool>((SCODE)hr >= 0);}
  142. inline bool HRIsOK(HRESULT hr) {return static_cast<bool>(hr == HR_OK);}
  143.  
  144. //
  145. // Base OC exception class
  146. //
  147. class TXObjComp : public TXOle {
  148.   public:
  149.     enum TError {
  150.       xNoError,             // App errors
  151.       xBOleLoadFail,
  152.       xBOleVersFail,
  153.       xBOleBindFail,
  154.       xDocFactoryFail,
  155.       xMissingRootIStorage, // doc and part errors
  156.       xInternalPartError,
  157.       xPartInitError,
  158.       xRootStorageOpenError,// storage errors
  159.       xStorageOpenError,
  160.       xStorageILockError,
  161.       xStreamOpenError,
  162.     };
  163.     TXObjComp(TError err, const string& msg, HRESULT stat = HR_FAIL)
  164.       : TXOle(msg, stat), ErrorCode(err) {}
  165.     TXObjComp(const TXObjComp& src)
  166.       : TXOle(src), ErrorCode(src.ErrorCode) {}
  167.    ~TXObjComp();
  168.  
  169.     TXObjComp* Clone();
  170.     void       Throw();
  171.  
  172.     static void Check(HRESULT stat, TError err, const char far* msg = 0);
  173.     static void Throw(TError err, HRESULT stat = HR_FAIL, const char far* msg = 0);
  174.  
  175.     const TError ErrorCode;
  176. };
  177.  
  178. #endif  // OCF_OCDEFS_H
  179.  
  180.