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