Руководство по языку B.Pascal 7

       

DLL и модуль System


В продолжении существования DLL переменная HInstance содер- жит описатель экземпляра DLL. Переменные FPrevInst и CmdShow в DLL всегда равны 0 (как и переменная PrefixSeg), поскольку DLL не имеет префикса программного сегмента (PSP). В прикладной програм- ме PrefixSeg никогда не равна 0, поэтому проверка PrefixSeg <> 0 возвращает True, если текущем модулем является прикладная прог- рамма, и False, если текущим модулем является DLL.

Чтобы обеспечить правильную работу администратора динамичес- ки распределяемой области, содержащегося в модуле System, код за- пуска библиотеки устанавливает переменную HeapAllocFlags в значе- ние gmem_Moveable + gmem_DDEShare. В Windows это приводит к тому, что все блоки памяти, распределенные через процедуры New и GetMem, будут принадлежать DLL, а не вызывающей ее прикладной программе.

Примечание: Подробности об администраторе памяти вы можете найти в Главе 21.



Содержание раздела