|
|
1.1 ! root 1: /* ! 2: * instdata.c - Functions to allocate and free the instance ! 3: * data structure passed to the low-level callback function. ! 4: */ ! 5: ! 6: #include <windows.h> ! 7: #include <mmsystem.h> ! 8: #include "midimon.h" ! 9: #include "circbuf.h" ! 10: #include "instdata.h" ! 11: ! 12: /* AllocCallbackInstanceData - Allocates a CALLBACKINSTANCEDATA ! 13: * structure. This structure is used to pass information to the ! 14: * low-level callback function, each time it receives a message. ! 15: * ! 16: * Because this structure is accessed by the low-level callback ! 17: * function, it must be allocated using GlobalAlloc() with the ! 18: * GMEM_SHARE and GMEM_MOVEABLE flags and page-locked with ! 19: * GlobalPageLock(). ! 20: * ! 21: * Params: void ! 22: * ! 23: * Return: A pointer to the allocated CALLBACKINSTANCE data structure. ! 24: */ ! 25: LPCALLBACKINSTANCEDATA FAR PASCAL AllocCallbackInstanceData(void) ! 26: { ! 27: HANDLE hMem; ! 28: LPCALLBACKINSTANCEDATA lpBuf; ! 29: ! 30: /* Allocate and lock global memory. ! 31: */ ! 32: hMem = GlobalAlloc(GMEM_SHARE | GMEM_MOVEABLE, ! 33: (DWORD)sizeof(CALLBACKINSTANCEDATA)); ! 34: if(hMem == NULL) ! 35: return NULL; ! 36: ! 37: lpBuf = (LPCALLBACKINSTANCEDATA)GlobalLock(hMem); ! 38: if(lpBuf == NULL){ ! 39: GlobalFree(hMem); ! 40: return NULL; ! 41: } ! 42: ! 43: /* Page lock the memory. ! 44: */ ! 45: //GlobalPageLock((HGLOBAL)HIWORD(lpBuf)); ! 46: ! 47: /* Save the handle. ! 48: */ ! 49: lpBuf->hSelf = hMem; ! 50: ! 51: return lpBuf; ! 52: } ! 53: ! 54: /* FreeCallbackInstanceData - Frees the given CALLBACKINSTANCEDATA structure. ! 55: * ! 56: * Params: lpBuf - Points to the CALLBACKINSTANCEDATA structure to be freed. ! 57: * ! 58: * Return: void ! 59: */ ! 60: void FAR PASCAL FreeCallbackInstanceData(LPCALLBACKINSTANCEDATA lpBuf) ! 61: { ! 62: HANDLE hMem; ! 63: ! 64: /* Save the handle until we're through here. ! 65: */ ! 66: hMem = lpBuf->hSelf; ! 67: ! 68: /* Free the structure. ! 69: */ ! 70: //GlobalPageUnlock((HGLOBAL)HIWORD(lpBuf)); ! 71: GlobalUnlock(hMem); ! 72: GlobalFree(hMem); ! 73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.