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

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

Объект из динамически загружаемой bpl


Страницы:   1 2

Slym ©   (2010-03-26 12:42:00) 

наткнулся на грабли:
hpkg:=LoadPackage('package.bpl');
try
 packageObj.SomeProc;//raised exception TSomeCustomPackageException  

finally
 UnLoadPackage(hpkg);
end;
//тут AV

оказывается ругается на TSomeCustomPackageException который в другом "подчиненном" пакете и загружается неявно при загрузке моего пакета
как проверить что пакет неявно чтото наплодил? чтоб все это грохнуть и закрыть пакет?


Slym   (2010-03-28 17:47:00) [21]

Игорь Шевченко ©   (28.03.10 17:18) [12]
все вяжется:
Exception - известен
type ESomeException=class(Exception) - неизвестен


Игорь Шевченко   (2010-03-28 17:18:00) [22]


> мне на данном этапе известен только базовый Exception


и


> предложи способ отделить известное исключение от неизвестного,
>  


Как-то не вяжется, не правда ли ?


Slym   (2010-03-28 17:17:00) [23]

Loginov Dmitry ©   (28.03.10 15:13) [9]
метода доступа может смениться, положат длугой БПЛ и нафик не нужны BPL-пакеты Indy
тоже касаемо bpl БД - БД сменится и нафик adortl
приложение скомпилировано с rtl,vcl,dbrtl,ModuleManager - в котором и реализована плагин начинка


Slym   (2010-03-28 17:12:00) [24]

Игорь Шевченко ©   (28.03.10 14:01) [8]
мне на данном этапе известен только базовый Exception
а все остальные в т.ч. и "неизвестные" исключения пролезут в фильтр E is Exception
if E is Exception then //не канает т.к. все исключения наследованы от Exception


Loginov Dmitry   (2010-03-28 15:13:00) [25]

if E.ClassName = 'EIdSocketError' then
 raise Exception.Create(E.Message)
else
 raise;


Не проще ли подключить к EXE и к BPL одни и те же BPL-пакеты с Indy ?


Игорь Шевченко   (2010-03-28 14:01:00) [26]


> предложи способ отделить известное исключение от неизвестного,
>  находящегося в выгружаемом модуле вот тут:


if E is известное_исключение then


Slym   (2010-03-28 12:49:00) [27]

Игорь Шевченко ©   (26.03.10 15:13) [4]
это в 5 утра писалось, 6 часов убил на локализацию плавающего AV
Сергей М. ©   (26.03.10 15:29) [5]
Ну ты и загнул с классом исключения)

предложи способ отделить известное исключение от неизвестного, находящегося в выгружаемом модуле вот тут:
procedure RaiseException(E:Exception);
begin
 Log(E.Message);
 //if E.ClassName='Exception' then //???
 //if E is Exception then //не канает т.к. все исключения наследованы от Exception
 //if E.ClassType=Exception then
 //неизвестный мне вариант
   raise E
 else
   raise Exception.Create(e.Message);
end;

а кому то и смешно но пока работает :)

Loginov Dmitry ©   (27.03.10 12:18) [6]
выгрузить необходимо


Loginov Dmitry   (2010-03-27 12:18:00) [28]


> finally
>  UnLoadPackage(hpkg);
> end;
> //тут AV


А зачем его выгружать? Раз разгрузил - и пусть висит.
Естественно на Finally при нестандартном исключении будет AV, ибо происходит обработка объекта исключения с уже выгруженными из памяти методами.


Сергей М.   (2010-03-26 15:29:00) [29]


> Slym ©   (26.03.10 13:56) [3]


Ну ты и загнул с классом исключения)
Курам ведь насмех !)

Игорь вон чуть не упалпацтул" )

А ведь ты вроде и не новичок, чтобы такие смешные ляпы допускать ...


Игорь Шевченко   (2010-03-26 15:13:00) [30]


>  if E.ClassType=Exception then


Гы


Slym   (2010-03-26 13:56:00) [31]

Игорь Шевченко ©   (26.03.10 12:46) [1]
что тут перепроектировать?
хост приложение о коммуникациях ничего не знает
загрузил пакет...
(тут неавная подгрузка IndyProtocols)
выполнил функцию из пакета
(тут исключение EIdSocketError)
закрыл все что явно открыл
выгрузил
(но эксепшн EIdSocketError остался) AV

проблему решил отловом нестандартных исключений и "переформатированием" в стандартные
except
on
 if E.ClassType=Exception then
   raise
 else
   raise Exception.Create(e.Message);
end;


Сергей М.   (2010-03-26 13:06:00) [32]


> как проверить что пакет неявно чтото наплодил?


Вестимо как - использовав встроенный отладчик.


Игорь Шевченко   (2010-03-26 12:46:00) [33]


> как проверить что пакет неявно чтото наплодил?


Пакеты перепроектировать


Страницы:   1 2

Наверх

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