Текущий архив: 2008.04.27;
Скачать: CL | DM;
Вниз
Програмное закрытие формы из Dll Найти похожие ветки
← →
206196131 © (2008-03-29 20:05) [0]есть приложение оно подгружает dll
в dll 2 формы, загружается сразу форма1
после разных всяких проверок либо открывается форма2 либо не открыватся.
в родительском окне
Application.CreateForm(Tform1,form1);
в form1
if (что с чемто = 1) then
Application.CreateForm(Tform2,form2)
else
form1.close;
form1.close вылетает по access violation at address 12345678 in module my.dll
при этом если закрываеть
form1 крестиком то никаких проблем....
← →
Сергей М. © (2008-03-29 20:17) [1]
> в родительском окне
Что за зверь ?
← →
206196131 © (2008-03-29 20:22) [2]обычное fsMDIForm все остальные окна fsMDIChild
← →
Сергей М. © (2008-03-29 20:28) [3]Т.е. ты пытаешься в dll-коде закрыть форму, код которой находится в хост-проекте и которая там же и создается, так ?
← →
206196131 © (2008-03-29 20:34) [4]типа того если парваильно поняли друг друга,
и родиделской формы я выхываю форму1 из dll в свою очередь
форму1 вызывает форму2 и дожна закрыться
но закрытие не получается
← →
trubin © (2008-03-29 20:37) [5]
> типа того если парваильно поняли друг друга,
> и родиделской формы я выхываю форму1 из dll в свою очередь
>
> форму1 вызывает форму2 и дожна закрыться
> но закрытие не получается
Пытался сосчитать орфографические ошибки и не смог - переполнение стека :)))
← →
Сергей М. © (2008-03-29 20:37) [6]Приложение и dll используют ран-тайм пакеты ?
← →
206196131 © (2008-03-29 20:42) [7]
> Приложение и dll используют ран-тайм пакеты ?
что имеете виду под ран-тайм пакетами
никаких пакетов я неиспользую если правильно понял
← →
Сергей М. © (2008-03-29 20:43) [8]
> что имеете виду под ран-тайм пакетами
В оциях сборки в свойствах проекта крыжик "Build with run-time packages" я имею ввиду
← →
206196131 © (2008-03-29 20:44) [9]trubin ты бы по делу чемто помог когда стек освободишь ))
← →
206196131 © (2008-03-29 20:45) [10]сейчас посмотрю, специально я туда на лазил
← →
Сергей М. © (2008-03-29 20:46) [11]
> 206196131 © (29.03.08 20:44) [9]
Формы в dll - блажь вообще.
Для озабоченных этим придуманы bpl.
← →
206196131 © (2008-03-29 20:46) [12]нет его там, как по умолчанию было так и осталось
← →
Сергей М. © (2008-03-29 20:47) [13]
> специально я туда на лазил
Зачем же ты полез со своими формами в dll, если не в курсе крайне важных при этом вещей ?
← →
206196131 © (2008-03-29 20:48) [14]это отдельный разговор Формы в dll ))
← →
Сергей М. © (2008-03-29 20:48) [15]
> нет его там
Плохо.
← →
206196131 © (2008-03-29 20:51) [16]полез из соображени таких
в случае каких либо изменений в модуле просто менять dll файл
при этом не трогать основной проект
(чуствую сейчас опять начнется война идиологии)
← →
Сергей М. © (2008-03-29 20:51) [17]
> это отдельный разговор Формы в dll
Ты не оригинален.
До тебя в форуме уже туева туча кулибиных пыталась на полном серьезе доказать серьезность этого отдельного разговора)
И, смею заметить, все они получали одними и теми же граблями по своим кулибинским лбам)
← →
Германн © (2008-03-29 20:55) [18]
> война идиологии
Забавная очепятка.
← →
Сергей М. © (2008-03-29 20:55) [19]
> в случае каких либо изменений в модуле просто менять dll
> файл
На здоровье, я не против)
Но нужно четкое, а не поверхностное понимание работы внутренних механизмов Делфи.
← →
206196131 © (2008-03-29 20:57) [20]и не сомниваюсь ))
но по сути дела есть какие нить предложения, или нет
← →
206196131 © (2008-03-29 20:59) [21]Германн вам бы на каком нить irc канале сидеть трафик гонять ))
← →
Palladin © (2008-03-29 21:00) [22]ага... bpl создавать, а не dll. и эффект тот же и все работает.
← →
206196131 © (2008-03-29 21:05) [23]мужики причем здесь bpl
есть конкретная проблема, программное закрытие формы загруженной из dll
сама себя форма должна закрыть
и неуместны тут ни blp ни соm
← →
Сергей М. © (2008-03-29 21:08) [24]
> есть конкретная проблема
Эта "проблема" может зависеть от множества факторов !
> неуместны тут ни blp ни соm
Вот com точно не уместен, а bpl оч даже уместен)
← →
206196131 © (2008-03-29 21:11) [25]странно то что по крестику форма нормально зарывается ни начто не материться
← →
Сергей М. © (2008-03-29 21:14) [26]Странно другое - неумение или нежелание пользоваться отладчиком.
← →
206196131 © (2008-03-29 21:22) [27]если бы все все умели, половино человечества сидело бы без работы))
← →
Loginov Dmitry © (2008-03-29 21:49) [28]> обычное fsMDIForm все остальные окна fsMDIChild
> Application.CreateForm(Tform2,form2)
Это дочернее окно так создается, или что?
> form1.close вылетает по access violation at address 12345678
> in module my.dll
>
> при этом если закрываеть
> form1 крестиком то никаких проблем....
Вот и отлаживай! F7 и F8 рулят! Если не в состоянии, то укажи более ЧЕТКО, в чем проблема? И прислушайся к совету насчет пакетов. Это избавляет от колоссальной доли геморроя, поверь...
← →
206196131 © (2008-03-29 22:06) [29]Application.CreateForm(Tform2,form2)
на последнии момент было так, есть другие предложения
← →
206196131 © (2008-03-29 22:13) [30]var
form2:Tform2;
begin
form2:= Tform2.Create(application);
form2.show;
form1.Close;//слетат тут
end;
так ничего не меняется
← →
Loginov Dmitry © (2008-03-29 22:15) [31]> Application.CreateForm(Tform2,form2)
> на последнии момент было так, есть другие предложения
Дочерние окна fsMDIChild обычно создают следующим образом:
Tform2.Create(Owner);
и никаких переменных типа form2 не используют. Можно конечно использовать, но только если будет создана всего одна форма Tform2.
← →
Loginov Dmitry © (2008-03-29 22:19) [32]> var
> form2:Tform2;
> begin
> form2:= Tform2.Create(application);
> form2.show;
> form1.Close;//слетат тут
> end;
>
> так ничего не меняется
что такое TForm1? Где данный объект создается (в EXE или DLL)?
где создается TForm2?
Что у тебя должно происходить при вызове form1.Close?
← →
206196131 © (2008-03-29 22:28) [33]обе формы из dll
ничего не должно происходить, должна зарыться форма form1
после того как отыкрыта form2
← →
Palladin © (2008-03-29 22:37) [34]вот незадача... application в dll и в хост приложении разный бааалин... сколько можно твердить сохдавай bpl, там application одинаковый. и да будет тебе известно что bpl никакого, ну ни малейшего абсолютно, отношения к com не имеет. эта та же самая dll. просто грузится специальными средствами, благодара которым например TForm из bpl тот же самый класс что и Tform в хлст приложении. и еще много вкусностей о которых довольно подробно описано в справке.
← →
206196131 © (2008-03-29 22:38) [35]руками form1 закрывается без проблем
а по form1.Close нет
← →
Loginov Dmitry © (2008-03-29 22:38) [36]1. приведи код инициализации dll-ки.
2. попробуй переименовать в инспекторе объектов форму Form1 во что-нибудь другое (например Form3)
← →
Loginov Dmitry © (2008-03-29 22:40) [37]> вот незадача... application в dll и в хост приложении разный
> бааалин... сколько можно твердить сохдавай bpl, там application
> одинаковый. и да будет тебе известно что bpl никакого, ну
> ни малейшего абсолютно, отношения к com не имеет. эта та
> же самая dll. просто грузится специальными средствами, благодара
> которым например TForm из bpl тот же самый класс что и Tform
> в хлст приложении. и еще много вкусностей о которых довольно
> подробно описано в справке.
зачем bpl создавать? Куда проще поставить заветную галочку в опциях обоих проектов!
← →
206196131 © (2008-03-29 22:46) [38])) уже что то, здесь и сейчас это както решаемо ?
или все переписывать
← →
Loginov Dmitry © (2008-03-29 22:48) [39]> )) уже что то, здесь и сейчас это както решаемо ?
Тебе решать!
← →
206196131 © (2008-03-29 22:57) [40]Palladin то что bpl и ком ничего общего не имеют это факт
но визуально, то я хоч у в итоге получить можно сделать на 4 способами (com,bpl, dll, И все в одном) )) насколько я знаю...
На тему bpl убедили окончательно но всёже поскажите как
раз и навсегда как закрыть это злополучное окно )) в случае в dll
← →
Loginov Dmitry © (2008-03-29 23:00) [41]> как
> раз и навсегда как закрыть это злополучное окно ))
очень просто - не открывай, и не придется его ни разу закрывать!
← →
206196131 © (2008-03-29 23:03) [42]так оно уже отрыто )) нужно закрыть
← →
Loginov Dmitry © (2008-03-29 23:10) [43]Ты реального кода ни граммы не привел! Не известно, что все-таки у тебя там не получается. Так что других советов пока дать невозможно!
← →
206196131 © (2008-03-29 23:16) [44]вот так вызываю форму из dll
FLiba := LoadLibrary(PChar(dll_file_name));
@Init := GetProcAddress(FLiba, PChar("InitPlugin"));
@Done := GetProcAddress(FLiba, PChar("DonePlugin"));
@CreateMDI := GetProcAddress(FLiba, PChar("CreateMDI"));
Init(integer(Application), integer(Screen));
Fplugin:= TForm(CreateMDI);
Fplugin.Show;
← →
Loginov Dmitry © (2008-03-29 23:21) [45]Приведи текст функции InitPlugin
← →
206196131 © (2008-03-29 23:21) [46]на форме 1 кнопка
по который пытаюсь закрыть окно, (2 окно как бы не при делах), тк ни одно из dll програмно не могу закрыть
← →
206196131 © (2008-03-29 23:23) [47]procedure InitPlugin(App, Scr: integer); StdCall;
var DA: TApplication; DS: TScreen;
begin
DS := Screen;
Screen := TScreen(Scr);
DA := Application;
Application := TApplication(App);
end;
← →
Loginov Dmitry © (2008-03-29 23:31) [48]ну хоть объект Application у тебя везде одинаковый. Это радует! :D
← →
Loginov Dmitry © (2008-03-29 23:35) [49]Еще раз напомню: переименуй форму Form1 в dll-ке.
Ибо если в exe-шнике уже есть Form1, а в dll-ке создается форма с тем же именем с помощью Application.CreateForm(Tform1,form1), и Application у них один, то это может привести к неприятным последствиям.
← →
206196131 © (2008-03-29 23:38) [50]перименовал, никаких пересечений имен небыло, но результат тотже
← →
206196131 © (2008-03-29 23:39) [51]чем отличаются события frm.Close; от нажатие крестика
← →
206196131 © (2008-03-30 00:21) [52]по итогу все оказалось в следующем в методе создания этого окна
вариант 1
Tfrm.Create(Application)
окошко рисуется но
Tfrm.close не работает
вариант 2
Application.CreateForm(Tfrm,frm);
так все работает
← →
Johnmen © (2008-03-30 00:52) [53]Чудны дела твои, Господи (с)
← →
Германн © (2008-03-30 01:11) [54]
> Johnmen © (30.03.08 00:52) [53]
>
> Чудны дела твои, Господи (с)
>
Не. Все эти формы в ДЛЛ - от лукавого.
← →
Johnmen © (2008-03-30 01:15) [55]
> Германн © (30.03.08 01:11) [54]
Понял. Господь не причем. Лукавый рулит... :)
← →
206196131 © (2008-03-30 01:21) [56]аха
← →
206196131 © (2008-03-30 06:45) [57]вариант 1
Tfrm.Create(Application)
окошко рисуется но
Tfrm.close не работает
вариант 2
Application.CreateForm(Tfrm,frm);
так все работает
и никакого отношения к dll неимет, любоё оно сзданное 1 способом не закрывается ))
а что касается DLL начал переписывать все на bpl пока доволен ))
← →
Loginov Dmitry © (2008-03-30 21:00) [58]> и никакого отношения к dll неимет, любоё оно сзданное
> 1 способом не закрывается ))
Странно... как это TForm1(nil).Close не работает. Да?
А у тебя именно это и получается.
← →
Сергей М. © (2008-03-31 08:27) [59]
> 206196131 © (29.03.08 23:23) [47]
>
> procedure InitPlugin(App, Scr: integer); StdCall;
Это что за танцы с бубном ?
Страницы: 1 2 вся ветка
Текущий архив: 2008.04.27;
Скачать: CL | DM;
Память: 0.61 MB
Время: 0.02 c