Операционная система Microsoft Windows 3.1 для программиста -том 3


Листинг 2.5. Файл lmem/lmem.cpp


#define STRICT #include <windows.h> #include <windowsx.h> #include <dos.h>

#pragma argsused

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { BYTE szBuf[100]; HLOCAL hmemLocal; HLOCAL hmemLoDiscard; void* pLocal; void* pLoDiscard; UINT uMaxFreeMem;

// Определяем размер доступной памяти uMaxFreeMem = LocalCompact(0);

wsprintf(szBuf, "Доступно памяти:\t%u\n", uMaxFreeMem); MessageBox(NULL, (LPSTR)szBuf, "Local Block", MB_OK);

// -------------------------------------------------------- // Работаем с перемещаемым блоком памяти // --------------------------------------------------------

// Дефрагментируем память для получения блока // размером 1000 байт uMaxFreeMem = LocalCompact(1000);

// Заказываем буфер размером 1000 байт hmemLocal = LocalAlloc(GHND, 1000);

if(hmemLocal != NULL) { // Если буфер получен, фиксируем его в памяти pLocal = LocalLock(hmemLocal); if(pLocal != NULL) { // Если блок успешно зафиксирован, // выводим значения идентификатора блока // и логический адрес блока wsprintf(szBuf, "hmemLocal=\t%04.4X\n" "pLocal=\t\t%04.4X", hmemLocal, pLocal);

MessageBox(NULL, (LPSTR)szBuf, "Local Block", MB_OK);

// ----------------------------------------- // Можно работать с полученным блоком памяти // Записываем в первый байт блока символ S *(PSTR)pLocal = 'S'; // -----------------------------------------

// Разрешаем перемещение блока LocalUnlock(hmemLocal); } else { MessageBox(NULL, "Ошибка при фиксировании блока", "Local Block", MB_OK); } // Отдаем блок памяти операционной системе LocalFree(hmemLocal); } else { MessageBox(NULL, "Мало памяти для перемещаемого блока", "Local Block", MB_OK); }

// -------------------------------------------------------- // Работаем с удаляемым блоком памяти // --------------------------------------------------------

// Заказываем удаляемый блок памяти размером 2000 байт hmemLoDiscard = LocalAlloc(LMEM_MOVEABLE | LMEM_DISCARDABLE, 2000);




Начало  Назад  Вперед