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

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

Invalid Pointer Operation в DLL. (не из-за String) [D7]


46_55_41_44 ©   (2004-09-30 13:14:00) 

Почему при создании модальной формы из DLL после ее закрытия вылетает Invalid Pointer Operation!!!


Гаврила   (2004-10-01 10:15:00) [1]


> [12] TUser ©   (30.09.04 16:56)


Двойного разрушения тут быть не может, так как пи разрушении формы (как и любого другого компонента) руками она(он) выкидывается из списка дочек овнера.

Вообще тут меня очень смущает строчка
Application := MY_App;
передаем указатель на объект в библиотеку из хоста. При компиляции без ран-тайм пакетов это, имхо, недопустимо


Babay   (2004-10-01 08:36:00) [2]

Подключение DLL статическое или динамическое?
Был уменя подобный глюк при статическом подключении и когда использовался компонет XPManifest. Убираем XPManifest все ок, ставим обратно имеем ошибку.
Лечил динамическим подключением DLL. Все работает.
Ошибку отследить до конца так и не удалось, она возникает где-то на уровне менеджера стилей в Д. (если конечно я все правильно понял).
Вопрос по этому поводу как-то задавал но вразумительного ответа так и не получил. Возможно у тебя тот самый случай.


TUser   (2004-09-30 16:56:00) [3]

Наверное, так. Форма создана - owner у нее Application. Ты ее потом дестроишь, а при закрытии приложения снова вызывается деструктор. Короче, [9].


Мастер   (2004-09-30 16:31:00) [4]


library Formsdll;
uses
 SysUtils,
 windows,
 Classes,
 ufModalOk,
 Controls,
 Forms;

function ShowYesNo(const Text: ShortString):Bool;stdcall;
begin
 Application.CreateForm(TfModalOk,fModalOk);
 Result := fModalOk.ShowModal=mrOk;
 fModalOk.Free;
end;

exports
   ShowYesNo;
end.


46_55_41_44   (2004-09-30 14:51:00) [5]

нет... и не в этом... Никто не может помочь моему горю? :)


Гаврила   (2004-09-30 14:46:00) [6]

>>Application.CreateForm(Tfrm_gin, frm_gin)

Замени на
frm_gin:=Tfrm_gin.Create(nil);

может дело в этом


46_55_41_44   (2004-09-30 14:44:00) [7]

То есть, если не открывать модальную форму все идет прекрасно!


46_55_41_44   (2004-09-30 14:43:00) [8]

Уточнение... При закрытии приложения выдается ошибка...


46_55_41_44   (2004-09-30 14:42:00) [9]

да нет.. не там


TUser   (2004-09-30 14:40:00) [10]

Вот здесь, наверное, выскакивает
>  frm_gin := nil;


46_55_41_44   (2004-09-30 14:35:00) [11]

процедурка, которая вызывает форму:

Procedure OpenForm(My_App: TApplication; FormID : Integer);
begin
 if Application <> My_App then
   Application := MY_App;
 Active_Form := FormID;
 case FormID of
   ...
   211: Application.CreateForm(Tfrm_gin, frm_gin)
   ...
 end;
end;

в frm_gin.FormCreate  
...
 ShowModal;
end;

formClose
begin
 Action := caFree;
 frm_gin := nil;
end;

А остальное ничего особенного. Все нормально работает... просто почему-то при закрытии выдается Invalid Pointer Operation.
Есть ли какие-то специальные правила создания модальных форм из ДЛЛ?


TUser   (2004-09-30 14:20:00) [12]

Покажи код DLL'ки ... и приложения


46_55_41_44   (2004-09-30 14:16:00) [13]

То есть? Можно по подробнее?


Мастер   (2004-09-30 13:48:00) [14]

Потому что в DLL ошибка в 17-й строке.


Наверх

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