Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Ошибки этапа выполнения в dll

Если в DLL происходит ошибка этапа выполнения, вызывающая

DLL прикладная программа завершает работу. При этом сама DLL не

обязательно удаляется из памяти, поскольку она может использо-

ваться другими прикладными программами.

Поскольку DLL не может знать, вызывается ли она из приклад-

ной программы Borland Pascal или из прикладной программы, напи-

санной на другом языке программирования, то DLL не может вызывать

процедуры выхода прикладной программы до завершения прикладной

программы. Прикладная программа просто прерывается и выгружается

из памяти. По этой причине, чтобы таких ошибок не происходило,

нужно обеспечить в DLL достаточное количество проверок.

Если в DLL под Windows происходит ошибка этапа выполнения,

то надежнее всего полностью выйти в Windows. Если вы просто пыта-

етесь модифицировать и перестроить сбойный код DLL, а затем снова

выполнить прикладную программу, Windows не будет загружать новую

версию, если ошибочная версия уже находится в память. Выйдите из

Windows и перезапустите ее, а Borland Pascal обеспечит загрузку

корректной версии DLL.

Dll и сегменты стека

В отличие от прикладной программы DLL не имеет своего собс-

твенного сегмента стека. Вместо этого она использует сегмент сте-

ка вызывающей DLL прикладной программы. Это может создать пробле-

мы в подпрограмме DLL, которые полагают, что регистры DS и SS

ссылаются на один и тот же сегмент, как это имеет место в модуле

прикладной программы Windows.

Borland Pascal никогда не генерирует код, подразумевающий

равенство DS = SS, и в библиотеке исполняющей системы Borland

Pascal таких предположений не делается. Если вы пишете код на

языке ассемблера, то не полагайтесь на то, что регистры DS и SS

содержат одно и то же значение.

Создание совместно используемых dll

Borland Pascal поддерживает DLL, которые могут совместно ис-

пользоваться в защищенном режиме DOS и в Windows. Совместно ис-

пользуемые DLL совместимы на уровне двоичного кода. Это означает,

что один и тот же файл .DLL может использоваться в прикладной

программе защищенного режима DOS или в прикладной программе

Windows.

При компиляции совместно используемой DLL в качестве целевой

платформы нужно выбирать Windows:

* В IDE выберите команду Compile¦Target и в диалоговом окне

Target (Целевая платформа) укажите Windows.

* При использовании компилятора, работающего в режиме ко-

мандной строки, для выбора в качестве целевой платформы

Windows используйте переключатель /CW.

DLL, скомпилированная для защищенного режима DOS, под

Windows использоваться не может, так как библиотека исполняющей

системы защищенного режима DOS использует отдельные функциональ-

ные вызовы DOS и DPMI, которые следует избегать в Windows.

Совместно используемая DLL может взаимодействовать с опера-

ционной системой (DOS защищенного режиме или Windows) только че-

рез модуль WinAPI. Этот модуль представляет функции, общие для

защищенного режима DOS и Windows. Другие интерфейсные модули

Windows, такие как WinTypes и WinProcs, описывают большое число

подпрограмм API, не поддерживаемых в защищенном режиме DOS.

Примечание: О модуле WinAPI рассказывается в Главе 17

"Программирование в защищенном режиме DOS".

Важно отметить, что хотя совместно используемая DLL может

выполняться одновременно и под Windows, в окне защищенного режима

Windows DOS, связь через DLL между двумя операционными средами

невозможна. Реально в системе будет присутствовать две копии DLL,

каждая из которых защищена от другой и использует полностью изо-

лированную область памяти.

Соседние файлы в предмете Программирование на Pascal