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


Листинг 3.7. Файл discard/dll.c


#define STRICT #include <windows.h>

// ======================================================== // Функция LibMain // Получает управление только один раз при // загрузке DLL-библиотеки в память // ========================================================

#pragma argsused int FAR PASCAL LibMain(HINSTANCE hInstance, WORD wDataSegment, WORD wHeapSize, LPSTR lpszCmdLine) { // После инициализации локальной области данных // функция LibEntry фиксирует сегмент данных. // Его необходимо расфиксировать. if(wHeapSize != 0) // Расфиксируем сегмент данных UnlockData(0);

// Возвращаем 1. Это означает, что инициализация // DLL-библиотеки выполнена успешно return 1; }

// ======================================================== // Функция WEP // Получает управление только один раз при // удалении DLL-библиотеки из памяти // ========================================================

#pragma argsused int FAR PASCAL WEP(int bSystemExit) { return 1; }

// ======================================================== // Функция NotifyProc // Она получает управление, если в текущей задаче // предпринимается попытка удаления блока памяти. // В этом случае функция возвращает значение 0, // в результате чего Windows отменяет удаление блока // ========================================================

#pragma argsused BOOL FAR PASCAL _export NotifyProc(HGLOBAL hglbl) { return 0; }

Эта библиотека исключительно проста, так как помимо стандартных функций LibMain и WEP в ней определена только одна функция извещения NotifyProc.

Изучение последней также не вызовет ни малейшего затруднения. Функция NotifyProc возвращает значение 0, запрещая Windows удалять блок памяти. Если надо разрешить удаление блока памяти, необходимо вернуть значение 1.

Обратим внимание на файл определения модуля DLL-библиотеки, приведенный в листинге 3.8.




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



Книжный магазин