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

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

Програмное закрытие формы из Dll


Страницы:   1 2 3

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


Страницы:   1 2 3

Наверх

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