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


Листинг 2.5. Файл lmem/lmem.cpp - часть 2


if(hmemLoDiscard != NULL) { // Если мы его получили, удаляем блок LocalDiscard(hmemLoDiscard);

// Пытаемся зафиксировать блок памяти pLoDiscard = LocalLock(hmemLoDiscard);

if(pLoDiscard != NULL) { wsprintf(szBuf, "hmemLoDiscard=\t%04.4X\n" "pLoDiscard=\t%04.4X", hmemLoDiscard, pLoDiscard); MessageBox(NULL, (LPSTR)szBuf, "Local Block", MB_OK);

// Разрешаем перемещение блока LocalUnlock(hmemLoDiscard); } else { // Если блок памяти не удалось зафиксировать, // проверяем, не был ли он удален if(LocalFlags(hmemLoDiscard) & LMEM_DISCARDED) { MessageBox(NULL, "Блок удален и мы его восстанавливаем", "Local Block", MB_OK);

// Восстанавливаем удаленный блок памяти hmemLoDiscard = LocalReAlloc(hmemLoDiscard, 256, LMEM_MOVEABLE | LMEM_DISCARDABLE);

// Фиксируем блок памяти pLoDiscard = LocalLock(hmemLoDiscard);

if(pLoDiscard != NULL) { // Выводим идентификатор и логический адрес // зафиксированного блока памяти wsprintf(szBuf, "hmemLoDiscard=\t%04.4X\n" "pLoDiscard=\t%04.4X", hmemLoDiscard, pLoDiscard); MessageBox(NULL, (LPSTR)szBuf, "Local Block", MB_OK);

// Освобождаем блок памяти LocalUnlock(hmemLoDiscard); } else { MessageBox(NULL, "Ошибка при фиксировании блока", "Local Block", MB_OK); } } }

// Отдаем удаляемый блок памяти операционной системе LocalFree(hmemLoDiscard); } else { MessageBox(NULL, "Мало памяти для удаляемого блока", "Local Block", MB_OK); }

return 0; }

Файл определения модуля приложения LMEM приведен в листинге 2.6.




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