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;

СПАСИБО!


Anatoly Podgoretsky   (2008-01-02 01:44:00) [1]

> Lamer666  (01.01.2008 23:01:28)  [28]

Везде BPL, пока не будешь делать межплатформенную реализацию ДЛЛ
А когда будешь делать, то никаких строк и классов, только простые типы, не выше СИ


Sergey Masloff   (2008-01-01 23:33:00) [2]

Lamer666   (01.01.08 23:01) [28]
>Так где же лучше использовать DLL а где BPL?
Везде где используется VCL, как правило, лучше использовать BPL.


Lamer666   (2008-01-01 23:01:00) [3]


> Anatoly Podgoretsky ©   (01.01.08 22:55) [27]

Так где же лучше использовать DLL а где BPL?


Anatoly Podgoretsky   (2008-01-01 22:55:00) [4]

> Lamer666  (01.01.2008 20:57:21)  [21]

> Кстати, сейчас убрал все Button-ы из формы в DLL и все работает как часы...8)

Это временно


Lamer666   (2008-01-01 22:43:00) [5]

А как загрузить DLL ку загрузить в память? Скоприровать в System32 и перезагрузить машину?
Или есть более оперативный метод?


Lamer666   (2008-01-01 22:31:00) [6]


> у меня вообще делает всегда только то что скажу... ;)

: ))


sniknik   (2008-01-01 22:15:00) [7]

а хто тебя знает... у меня не возникает. у меня вообще делает всегда только то что скажу... ;)


Lamer666   (2008-01-01 22:00:00) [8]

Но почему при добалении КНОПКИ возникает ОШИБКА?


sniknik   (2008-01-01 21:28:00) [9]

> Таже ошибка! : ((
значит не только в показанном коде тв даешь ссылки на область памяти dll, которые "теряются" с выгрузкой.

> сейчас убрал все Button-ы из формы в DLL и все работает как часы...8)
ну, вот значит гдето там оно и было.


Lamer666   (2008-01-01 20:57:00) [10]


> Формы в DLL -зло :)

Да? Может и вправду BPL?

Кстати, сейчас убрал все Button-ы из формы в DLL и все работает как часы...8)


{RASkov}   (2008-01-01 20:52:00) [11]

> [17] Lamer666   (01.01.08 20:45)
> Таже ошибка! : ((

Формы в DLL -зло :)

Вот так еще попробуй:
library YourLib;
uses
  SysUtils, Windows, UBegForms, Forms, UAftForms.....;


Вот модули:
--------------------------------
unit UBegForms;
interface
uses Windows;

var RealHInstance: LongWord;

implementation

initialization
RealHInstance:=HInstance;
HInstance:=GetModuleHandle(nil);
end.


-----------------------------------
unit UAftForms;
interface
uses Windows, UBegForms;

implementation

initialization
HInstance:=RealHInstance;
end.


Lamer666   (2008-01-01 20:51:00) [12]


> MetalFan ©   (01.01.08 20:46) [18]

Спасибо!


MetalFan   (2008-01-01 20:46:00) [13]


> > лучше уж bpl тогда.
>
> Что ЭТО?

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=274


Lamer666   (2008-01-01 20:45:00) [14]

Function LogInSQLForm(App:TApplication;LCaption:PChar):PChar;Stdcall;Export;
Var OLDHND: THandle;
   Begin
   OLDHND:=Application.Handle;
   Application.Handle :=App.Handle;
   Form1:=TForm1.Create(Application);
   If Form1.ShowModal=1 then ShowMessage('Ôîðìà çàêðûòà ñ ðåçóëüòàòîì "Ok"');
   Form1.Free;
   Application.Handle:=OLDHND;
   End;

Таже ошибка!: ((


{RASkov}   (2008-01-01 20:35:00) [15]

> function CreateTheForm(const APP: TApplication.....): Boolean;

Замени на свое:

> Function LogInSQLForm(App:Tapplication; LCaption: PChar): PChar; Stdcall; Export;


{RASkov}   (2008-01-01 20:33:00) [16]

> [14] Lamer666   (01.01.08 20:25)

Наоборот :)

Вот примерно так попробуй:

var OLDHND: THandle;
function CreateTheForm(const APP: TApplication.....): Boolean;
begin
 OLDHND:=Application.Handle;
 Application.Handle:=APP.HAndle;  
 Application.CreateForm(ТForm1, Form1);
 if Form1.ShowModal=1 then ShowMessage('Форма закрыта с результатом "Ok"');
 Form1.Free;
 Application.Handle:=OLDHND;
end;

try - только не забудь....


Lamer666   (2008-01-01 20:25:00) [17]


> Ну ты где его меняешь? Вот там и назад возвращай при закрытии
> формы....


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;
     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('');
   App.Handle:=Application.Handle;
   End;


?


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

> [12] Lamer666   (01.01.08 20:18)
> И где (в dll-ке или в приложении)?

Ну ты где его меняешь? Вот там и назад возвращай при закрытии формы....


Lamer666   (2008-01-01 20:18:00) [19]


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

Очевидно что НЕТ, не возвращаю, а как его вернуть? И где (в dll-ке или в приложении)?


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

> [9] Lamer666   (01.01.08 20:09)

Хэндл верни :)


Страницы:   1 2

Наверх

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