![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Програмное закрытие формы из Dll
206196131 © (2008-03-29 20:05:00)есть приложение оно подгружает 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-31 08:27:00) [1]
> 206196131 © (29.03.08 23:23) [47]
>
> procedure InitPlugin(App, Scr: integer); StdCall;
Это что за танцы с бубном ?
Loginov Dmitry (2008-03-30 21:00:00) [2]> и никакого отношения к dll неимет, любоё оно сзданное
> 1 способом не закрывается ))
Странно... как это TForm1(nil).Close не работает. Да?
А у тебя именно это и получается.
206196131 (2008-03-30 06:45:00) [3]вариант 1
Tfrm.Create(Application)
окошко рисуется но
Tfrm.close не работает
вариант 2
Application.CreateForm(Tfrm,frm);
так все работает
и никакого отношения к dll неимет, любоё оно сзданное 1 способом не закрывается ))
а что касается DLL начал переписывать все на bpl пока доволен ))
206196131 (2008-03-30 01:21:00) [4]аха
Johnmen (2008-03-30 01:15:00) [5]
> Германн © (30.03.08 01:11) [54]
Понял. Господь не причем. Лукавый рулит... :)
Германн (2008-03-30 01:11:00) [6]
> Johnmen © (30.03.08 00:52) [53]
>
> Чудны дела твои, Господи (с)
>
Не. Все эти формы в ДЛЛ - от лукавого.
Johnmen (2008-03-30 00:52:00) [7]Чудны дела твои, Господи (с)
206196131 (2008-03-30 00:21:00) [8]по итогу все оказалось в следующем в методе создания этого окна
вариант 1
Tfrm.Create(Application)
окошко рисуется но
Tfrm.close не работает
вариант 2
Application.CreateForm(Tfrm,frm);
так все работает
206196131 (2008-03-29 23:39:00) [9]чем отличаются события frm.Close; от нажатие крестика
206196131 (2008-03-29 23:38:00) [10]перименовал, никаких пересечений имен небыло, но результат тотже
Loginov Dmitry (2008-03-29 23:35:00) [11]Еще раз напомню: переименуй форму Form1 в dll-ке.
Ибо если в exe-шнике уже есть Form1, а в dll-ке создается форма с тем же именем с помощью Application.CreateForm(Tform1,form1), и Application у них один, то это может привести к неприятным последствиям.
Loginov Dmitry (2008-03-29 23:31:00) [12]ну хоть объект Application у тебя везде одинаковый. Это радует! :D
206196131 (2008-03-29 23:23:00) [13]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:21:00) [14]Приведи текст функции InitPlugin
206196131 (2008-03-29 23:21:00) [15]на форме 1 кнопка
по который пытаюсь закрыть окно, (2 окно как бы не при делах), тк ни одно из dll програмно не могу закрыть
206196131 (2008-03-29 23:16:00) [16]вот так вызываю форму из 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:10:00) [17]Ты реального кода ни граммы не привел! Не известно, что все-таки у тебя там не получается. Так что других советов пока дать невозможно!
206196131 (2008-03-29 23:03:00) [18]так оно уже отрыто )) нужно закрыть
Loginov Dmitry (2008-03-29 23:00:00) [19]> как
> раз и навсегда как закрыть это злополучное окно ))
очень просто - не открывай, и не придется его ни разу закрывать!
206196131 (2008-03-29 22:57:00) [20]Palladin то что bpl и ком ничего общего не имеют это факт
но визуально, то я хоч у в итоге получить можно сделать на 4 способами (com,bpl, dll, И все в одном) )) насколько я знаю...
На тему bpl убедили окончательно но всёже поскажите как
раз и навсегда как закрыть это злополучное окно )) в случае в dll