home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / memory / global / globdisc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  2.2 KB  |  75 lines

  1. /*
  2.  *   GlobalDiscard
  3.  *   globdisc.c
  4.  *
  5.  *   This program demonstrates the use of the GlobalDiscard function.
  6.  *   The GlobalDiscard function marks a block of memory for discarding.
  7.  *   After GlobalDiscarding, to check if a block has really been discarded,
  8.  *   try to GlobalLock. If the return value is NULL, then the block has
  9.  *   been discarded.
  10.  *
  11.  */
  12.  
  13. #include "windows.h"
  14.  
  15. int sprintf();
  16.  
  17. typedef struct {         /* structure we are going */
  18.         char x[50];   /* to allocate and lock    */
  19.         int y;
  20.            } MYSTRUCT;
  21.  
  22. typedef MYSTRUCT far *lpMyPtr;    /* far pointer to MYSTRUCT type */
  23.  
  24. int PASCAL WinMain( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  25. HANDLE hInstance, hPrevInstance;
  26. LPSTR lpszCmdLine;
  27. int cmdShow;
  28. {
  29.     HANDLE hMemBlock;      /* Handle to memory block         */
  30.     lpMyPtr  ThisPtr;      /* Pointer to myStruct         */
  31.     char szBuff[60];      /* buffer for message box         */
  32.     HANDLE Discarded;      /* return value from GlobalDiscard */
  33.  
  34.     (DWORD)GlobalCompact((DWORD)-1);
  35.  
  36. /* allocate space in global heap for a MYSTRUCT structure */
  37.     hMemBlock = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DISCARDABLE,
  38.             (long)sizeof(MYSTRUCT));
  39.  
  40. /* if memory allocated properly */
  41.     if (hMemBlock)
  42.     {
  43.     /* lock memory into current address */
  44.     ThisPtr = (lpMyPtr)GlobalLock(hMemBlock);
  45.  
  46.     /* if lock worked */
  47.     if (ThisPtr != NULL)
  48.         {
  49.  
  50.           GlobalUnlock(hMemBlock);        /* unlock memory */
  51.  
  52.      /* mark hMemBlock for discarding */
  53.           GlobalDiscard(hMemBlock);
  54.  
  55.      /* if GlobalLock works (meaning hMemBlock not discarded) */
  56.         if ( (ThisPtr = (lpMyPtr)GlobalLock(hMemBlock)) != NULL)
  57.         MessageBox(NULL,(LPSTR)"It has not been discarded",
  58.                 (LPSTR)" ",MB_OK);
  59.         else
  60.         MessageBox(NULL,(LPSTR)"It HAS been discarded",
  61.                 (LPSTR)"Before compaction...",MB_OK);
  62.         GlobalCompact((DWORD)-1);
  63.  
  64.      /* if GlobalLock works (meaning hMemBlock not discarded) */
  65.         if ((ThisPtr = (lpMyPtr)GlobalLock(hMemBlock)) != NULL)
  66.         MessageBox(NULL,(LPSTR)"it has not been discarded",
  67.                 (LPSTR)"After compaction...",MB_OK);
  68.         else
  69.         MessageBox(NULL,(LPSTR)"it HAS been discarded",
  70.                 (LPSTR)"After compaction...",MB_OK);
  71.         }
  72.     }
  73.     return 0;
  74. }
  75.