Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Насколько правиьны эти утверждения   Найти похожие ветки 

 
TUser ©   (2004-05-30 19:56) [0]

Прочитал это на DelphiWorld. Хотелось бы услышать авторитетное мнение по поводу этих советов
Главное, что нужно помнить при разработке DLL - вы не должны допускать ситуацию, при которой любое исключение осталось бы неперехваченным (спасибо Pat Ritchey за столь мудрый совет). В теле экспортируемых функций "заверните" все в блоки try..except (которые замечательно обрабатываются Delphi).

Далее, любые ресурсы, которые вы явно создаете при открытии DLL, должны создаваться в обработчике FormCreate (а не в секции Initialization) и освобождаться в обработчике FormClose. Мне кажется, что при вызове DLL (и использовании ее для распределения ресурсов) они не полностью освобождается до тех пор, пока вызывающее приложение не будет закрыто, а при вторичном вызове DLL не перегружается (это мои наблюдения, но, похоже, они верны). По всей видимости, ресурсы, освобожденные в первый раз, во время второго вызова не пересоздаются. У меня была масса проблем до тех пор, пока в коде я не определил "нужное место" для освобождения ресурсов. Но после того, как я переместил работу с ресурсами в обработчики событий FormCreate и FormClose, GPF исчезли.

Кроме того, для освобождения ресурсов вы должны вместо метода Close или Free использовать метод Release.

Ну и последний совет: вы должны быть очень осторожными при создании и освобождении ресурсов в DLL и подходить к вопросу программирования очень тщательно. Delphi может простить такую ошибку в EXE, но не в DLL.


 
VMcL ©   (2004-05-30 20:24) [1]

>>TUser ©  (30.05.04 19:56)

В теле экспортируемых функций "заверните" все в блоки try..except
Стараюсь приблизительно так и делать (если код в DLL может вызвать исключение).

создаваться в обработчике FormCreate ... и освобождаться в обработчике FormClose
ИМХО, если создавать в FormCreate, то освобождать в FormDestroy.

вы должны ... подходить к вопросу программирования очень тщательно
Это слишком правильно, чтобы с этим можно было не согласиться.


 
TUser   (2004-05-31 10:27) [2]

А правда ли, что
> Delphi может простить такую ошибку в EXE, но не в DLL.


 
Erik1   (2004-05-31 10:32) [3]

Прощает суд, а не Delphi. :)
Ну а насчет ресурсов вроде правильно, поскольку dll может загружатся один раз и Initialization соответствено выполнится один раз.



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.044 c
1-1086187853
Ruslan
2004-06-02 18:50
2004.06.13
Преобразование шестнадцатеричной строки в целое


14-1085759818
Petr V. Abramov
2004-05-28 19:56
2004.06.13
Виноватый назначен! :)


1-1086067114
nitro
2004-06-01 09:18
2004.06.13
Как присвоить Label.Caption значение текущего элемента Combobox ?


9-1077025452
Delphi_X_akep
2004-02-17 16:44
2004.06.13
DelphiX, TPictureCollectionItem, TPicture и TCanvas


14-1085638234
REA
2004-05-27 10:10
2004.06.13
Хороший тон