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

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

Ошибка при после вызова формы из DLL [D7, WinXP]


Страницы:   1 2

Lamer666 ©   (2008-01-01 16:13:00) 

При многократном вызове модальной формы АВТОРИЗАЦИИ из dll после закрытия своего приложения я получаю ошибку:
Project admin.exe raised too many consecutive exception: "access violation at 0x00333162: read of adrress 0x00b886ac".
А если в форму АВТОРИЗАЦИИ добаляю кнопки, то после закрятия своего приложения я получаю ошибку:
Инструкция по адресу "0x00333162" обратилась к памяти по адресу "0x00b7583c". Память на может быть "read". А потом форму с заголовком Error и сообщением Runtime error 216 at 00333162.

Помогите!

Форму в DLL запускаю так:

Function LogInSQLForm(const App:Tapplication):PChar;Stdcall;Export;
   Begin
   Application.Handle :=App.Handle;
   Form1:= TForm1.Create (Application.MainForm);
   Form1:=TForm1.Create(App);
   Form1.Caption:='Авторизация';
   Form1.ShowModal;
     If Form1.Tag=1 Then
     begin
     Result:=PChar('Provider=SQLOLEDB.1;Password='+Form1.MaskEdit1.Text+';Persist Security Info=True;User ID='+Form1.Edit3.Text+';Initial Catalog='+Form1.Edit2.Text+';Data Source='+Form1.Edit1.Text);
     end
     Else Result:=PChar('');
     End;

СПАСИБО!


{RASkov}   (2008-01-01 20:13:00) [21]

> [0] Lamer666   (01.01.08 16:13)
> Function LogInSQLForm(const App:Tapplication):PChar;Stdcall;
> Export;
>   Begin
>   Application.Handle :=App.Handle;

А назад Хэндл возвращаешь?


Lamer666   (2008-01-01 20:09:00) [22]

Function LogInSQLForm(App:Tapplication;LCaption:PChar):PChar;Stdcall;Export;
   Begin
   Application.Handle :=App.Handle;
   Form1:=TForm1.Create(Application);
   Form1.Caption:='Àâòîðèçàöè 5;: '+StrPas(LCaption);
   Form1.RxLabel1.Caption:=StrPas(LCaption);
   Form1.ShowModal;
     Result:=PChar('Provider=SQLOLEDB.1;Password='+Form1.MaskEdit1.Text+';Persist Security Info=True;User ID='+Form1.Edit3.Text+';Initial Catalog='+Form1.Edit2.Text+';Data Source='+Form1.Edit1.Text);
     End;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=CaFree;
end;


Ошибка ПО ПРЕЖНЕМУ ПОЯВЛЯЕТЬСЯ : (((


Lamer666   (2008-01-01 19:58:00) [23]


> отдай в owner просто nil. только сам тогда убей ее.

Если так, то форма из ДЛЛ имеет свою кнопку на панели задач


Lamer666   (2008-01-01 19:48:00) [24]


> лучше уж bpl тогда.

Что ЭТО?


MetalFan   (2008-01-01 19:46:00) [25]


> Почему? На мой взгляд у добно.

тянет за собой лишний размер.
лучше уж bpl тогда.


Lamer666   (2008-01-01 19:43:00) [26]


> MetalFan ©   (01.01.08 17:29) [1]

Сейчас исправлю и попробую!

> 1 - глобальная, сама идея держать форму в dll...

Почему? На мой взгляд у добно. Нужно что то изменить, взял переделал DLL-ку и скопировал в рабочий каталог, т.е. "ВОЗМОЖНОСТИ" проекта можно определять по средствам DLL-к..
> а может у него CloseAction = caFree?
 НЕТ просто CLOSE.


MetalFan   (2008-01-01 18:53:00) [27]


> форма создается но не уничтожается

а может у него CloseAction = caFree?
))


sniknik   (2008-01-01 17:31:00) [28]

> это что за ерунда? зачем 2 раза создавать?
упс. просмотрел. 4 ошибки.


sniknik   (2008-01-01 17:30:00) [29]

в коде 3 ошибки
1 - глобальная, сама идея держать форму в dll...
2 - форма создается но не уничтожается (железное правило "создал?-уничтожь!" и именно в той области где создавал, исключения редки.)
3 - работа с PChar, передается указатель на локальную строку в dll, т.е. указатель в программе будет на чужую область памяти... или на свою, если менеджер памяти общий, но если так, то тогда зачем PChar? передавай строку. (кстати общий менеджер просто необходим изза работы с формой/Application)

и одна несуразность
> Form1.Tag=1
? только что делал ShowModal, проигнорировал ModalResult, только для того чтобы "изобрести" собственный велосипед(аналог)?


MetalFan   (2008-01-01 17:29:00) [30]

передавай просто хэндл, зачем ссылку на объект давать?

>    Form1:= TForm1.Create (Application.MainForm);
>    Form1:=TForm1.Create(App);

это что за ерунда? зачем 2 раза создавать?
отдай в owner просто nil. только сам тогда убей ее.


Страницы:   1 2

Наверх

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