![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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-й строке.