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

  1. /*
  2.  *   This program demonstrates the use of the GlobalFlags function. The
  3.  *   GlobalFlags function returns information about the specified block
  4.  *   of memory allocated in the Global heap. GlobalFlags was called from
  5.  *   WinMain in this sample application.
  6.  */
  7.  
  8. #include "windows.h"
  9. #include <stdio.h>
  10.  
  11. int PASCAL WinMain(hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  12. HANDLE hInstance, hPrevInstance;
  13. LPSTR lpszCmdLine;
  14. int cmdShow;
  15. {
  16.     HANDLE hMemBlock;    /* Handle to memory block */
  17.     char far *lpszMem;   /* Pointer to Double Word in Global Memory. */
  18.     char szBuff[30];     /* buffer for message box */
  19.     BOOL unlocked;       /* return value from GlobalUnlock */
  20.     WORD FlagCall;       /* return value from GlobalFlags */
  21.  
  22. /* allocate space in global heap for MOVEABLE and DISDCARDABLE memory */
  23.     MessageBox(GetFocus(), (LPSTR)"Obtaining Global Memory.",
  24.                (LPSTR)"GlobalAlloc()", MB_OK);
  25.     hMemBlock = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT | GMEM_DISCARDABLE,
  26.                             (long)sizeof(DWORD));
  27.  
  28. /* if memory allocated properly */
  29.     if (hMemBlock != NULL)
  30.     {
  31.     /* lock memory into current address */
  32.     lpszMem = GlobalLock(hMemBlock);
  33.     /* if lock worked */
  34.     if (lpszMem != NULL)
  35.         {
  36.        MessageBox(GetFocus(), (LPSTR)"Locking Global Memory.",
  37.                   (LPSTR)"GlobalLock()", MB_OK);
  38.        FlagCall = GlobalFlags(hMemBlock);    /* get global flags */
  39.        /* if discardable */
  40.        if ((FlagCall & GMEM_DISCARDABLE))
  41.           MessageBox(GetFocus(), (LPSTR)"This block is discardable.",
  42.                      (LPSTR)"According to GlobalFlags()...", MB_OK);
  43.        else
  44.        MessageBox (GetFocus(), (LPSTR)"This block is NOT discardable.",
  45.                    (LPSTR)"According to GlobalFlags()...", MB_OK);
  46.  
  47.        /* if lockcount 0 */
  48.        if ((FlagCall & GMEM_LOCKCOUNT) == 0)
  49.           MessageBox(GetFocus(),(LPSTR)"The lock count is 0.",
  50.                      (LPSTR)"Before unlocking, according to GlobalFlags()...",
  51.                      MB_OK);
  52.        else
  53.           MessageBox(GetFocus(),(LPSTR)"The lock count is NOT 0.",
  54.                      (LPSTR)"Before unlocking, according to GlobalFlags()...",
  55.                      MB_OK);
  56.  
  57.        MessageBox(GetFocus(), (LPSTR)"Unlocking Global Memory.",
  58.                   (LPSTR)"GlobalUnlock()", MB_OK);
  59.        unlocked = GlobalUnlock(hMemBlock);    /* unlock memory */
  60.        FlagCall = GlobalFlags(hMemBlock);
  61.        /* if lockcount 0 */
  62.        if ((FlagCall & GMEM_LOCKCOUNT) == 0)
  63.           {
  64.           MessageBox(GetFocus(),(LPSTR)"The lock count is 0.",
  65.                      (LPSTR)"After unlocking, According to GlobalFlags()...",
  66.                      MB_OK);
  67.           GlobalFree(hMemBlock);              /* free memory   */
  68.           }
  69.        else
  70.           MessageBox(GetFocus(),(LPSTR)"The lock count is NOT 0.",
  71.                      (LPSTR)"Before unlocking, according to GlobalFlags()...",
  72.                      MB_OK);
  73.        }
  74.     else
  75.        MessageBox(GetFocus(),(LPSTR)"The lock DID NOT work properly.",
  76.                   (LPSTR)" ", MB_OK);
  77.     }
  78.     return 0;
  79. }
  80.