Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Две интересные ситуации с Dll. [D3]


yuger ©   (2002-02-14 12:16:00) 

Ситуация №1:
Я написал Dll, которая работает со строками
В експортные функции я, как положено, передаю параметры и получаю результат как PChar.
Использую также некоторые другие (внутренние) функции - там я передаю параметры как string.
Для трасировки я промежуточные результаты выводил showmessage-ем.
Пришлось подключить Dialogs. после отладки я поубирал showmessage
и отключил dialogs. Она начала работать неправильно (не екзепшены и проч. а логика). Дописываю модуль dialogs - снова всеработает как часы. Исколесил Dialogs - никаких переопределений функций и типов не нашел.Мне посоветовали подключить ShareMem, но после этого она вообще не поггружается(ругается). Я ее динамически подгружаю.
В чем же тут дело? Из за Dialogs она получила размер 195Kb.
Без него 48Kb. Мне ОЧЕНЬ важен маленький размер. Что надо сделать
и в чем тут причина?
Ситуация №2:
Я динамически подгружаю Dll, потом выгружаю freelibrary и
спустя значительное время пытаюсь удалить, а система говорит, что библиотека занята.
После выхода из программы удалить уже удается.
(В моей программе я даю возможность красиво подключать и удалять плагины). Как это обойти.


Digitman (M)   (2002-02-14 12:28:00) [1]

В DLL :
USES ShareMem, ... а затем уж - все прочие используемые ...


Fellomena   (2002-02-14 12:25:00) [2]

По поводу ситуации 2:
Когда ты делаешь FreeLibraryты не выгружаешь, а освобождаешьDLL. Windows не освобождает из под неё память намеренно. Потому что если вдруг твоё приложение снова запросит эту DLL накладные расходы на отображения из файла будут больше, нежели из памяти. Этот механизм используется Windows для ускорения работы программ (вернее оптимизации этой работы). Иногда это оправдывает себя, но иногда мешает.

По поводу ситуации 1:
А ты попробуй не передавать как string - используй Char и PChar или пользуйся преобразованием типов при передачи параметров типа String.


Наверх

Титульная страница Поиск, карта сайта Написать письмо