home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / BOCOLE.PAK / OLENEW.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  1.7 KB  |  89 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectComponents
  3. // Copyright (c) 1991, 1996 by Borland International, All Rights Reserved
  4. //
  5. // $Revision:   2.2  $
  6. //
  7. // OleNew.cpp -- Remap global operator new to use the current Ole2 allocator
  8. //----------------------------------------------------------------------------
  9. #include "BOle.h"
  10. #include <Windows.h>
  11.  
  12. #include <string.h>
  13. #include <compobj.h>
  14.  
  15.  
  16. /*inline*/ void _FAR * OleAlloc (unsigned size) 
  17. {
  18.     void _FAR * p = NULL;
  19.     IMalloc *pMalloc;
  20.  
  21. #ifndef WIN32
  22.     if (SUCCEEDED(CoGetMalloc (MEMCTX_SHARED, &pMalloc))) {
  23.         p = pMalloc->Alloc (size);
  24.         pMalloc->Release();
  25.     }
  26.     return p;
  27. #else
  28.     if (SUCCEEDED(CoGetMalloc(MEMCTX_TASK, &pMalloc))) {
  29.         p = pMalloc->Alloc(size); 
  30.         pMalloc->Release();
  31.     }
  32.     return p;
  33. #endif
  34. }
  35.  
  36. inline BOOL OleFree (void * p) 
  37. {
  38.     IMalloc *pMalloc;
  39.  
  40. #ifndef WIN32
  41.     if (SUCCEEDED(CoGetMalloc(MEMCTX_SHARED, &pMalloc))) {
  42.         pMalloc->Free(p);
  43.         return TRUE;
  44.     }
  45.     return FALSE;
  46. #else
  47.     if (SUCCEEDED(CoGetMalloc(MEMCTX_TASK, &pMalloc))) {
  48.         pMalloc->Free(p);
  49.         return TRUE;
  50.     }
  51.     return FALSE;
  52. #endif
  53. }
  54.  
  55. void _FAR * _cdecl _FARFUNC operator new (unsigned size)
  56. {
  57.     return OleAlloc(size);
  58. }
  59.  
  60. #ifndef WIN32
  61. void _FAR * _cdecl _FARFUNC operator new (unsigned long size)
  62. {
  63.     return OleAlloc(size);
  64. }
  65. #endif
  66.  
  67. void _FAR * _cdecl _FARFUNC operator new[] (unsigned size)
  68. {
  69.     return OleAlloc(size);
  70. }
  71.  
  72. #ifndef WIN32
  73. void _FAR * _cdecl _FARFUNC operator new[] (unsigned long size)
  74. {
  75.     return OleAlloc(size);
  76. }
  77. #endif
  78.  
  79. void _cdecl _FARFUNC operator delete (void *p)
  80. {
  81.     OleFree(p);
  82. }
  83.  
  84. void _cdecl _FARFUNC operator delete[] (void *p)
  85. {
  86.     OleFree(p);
  87. }
  88.  
  89.