Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DLL / 5 сообщений из 5, страница 1 из 1
02.10.2003, 21:25
    #32282615
Tung
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL
Добрый вечер, подскажите пожалуйста, как форму загнать в DLL, ни разу не пробовал,

вопрос 2:
При создании формы выскакивает фигня: Access violation at adress 77F84EB9 in module ntdll.dll. write of adress 00404B91

Раньше не выскакивало, в исходниках ничего не менял....
как с этим бороться? После нажатия Ок все работает как прежде....
...
Рейтинг: 0 / 0
03.10.2003, 03:49
    #32282686
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL
говоришь ошибка пролетает в ntdll.dll ... Это не хорошо, совсем не хорошо....

форму-то где создаешь? в библиотеке?
давай я те лучше просто пример сброшу модуля который работает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
var
 oldApp : TApplication;

Function RunEdit (ConnDBt : TConnDB;
                 ParamsT : TParamsA;
                 ParamsDlgT : TParamsToDlg; App : TApplication):Boolean;
begin
 Application := App;
 Result := RunWin(ConnDBt, ParamsT, ParamsDlgT);
 Application.ProcessMessages; // дали ей самоуничтожиться (если ее не было, то это не помешает)
 Application := oldApp; // восстановили среду приложения библиотеки. После этого уже можно выгружать
end;

exports
 RunEdit name 'RunMDIChild';

begin
 OldApp:=Application;  // эта фишка обязательна для динамической выгрузки библиотеки.
 //т.е. нужно сохранить ссылку на родной Application библиотеки, чтобы ее потом можно было
 //динамически выгрузить.
end.


и в другом модуле создание и удаление формы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Function RunWin(ConnDBt : TConnDB;
                ParamsT : TParamsA;
                ParamsDlgT : TParamsToDlg) : Boolean;

implementation

uses AppUniverExp;

{$R *.DFM}

Function RunWin;
 var Win: TSecurityForm;
Begin
 result:=true; Win:=nil;
 Win := TSecurityForm.Create(Application,ConnDBt,ParamsT,ParamsDlgT);
 if Win <> nil then Win.ShowModal
 else begin
  MessageBox( 0 ,'Не найдена форма для редактирования таблицы','Ошибка',MB_ICONERROR);
  result:=false;
 end;
 if result then result := not Win.CancelFlag;
 If (Win <> Nil) Then Begin If Win.Visible Then Win.Close;
                            If Win <> Nil Then Win.Free; Win := Nil; End;
end;
...
Рейтинг: 0 / 0
03.10.2003, 05:41
    #32282698
Lt
Lt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL
Можно просто подключить модуль содержащий форму к проекту, в проекте
создать процедуру
procedure CreateF;
Begin
Form1:=TForm1.Create(Application);
Form1.ShowModal;
Form1.Free;
end;
Важно указать в качестве владельца Application иначе при FreeLibrary будет вылетать AV
...
Рейтинг: 0 / 0
03.10.2003, 07:18
    #32282722
Вах
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL
...
Рейтинг: 0 / 0
06.10.2003, 03:42
    #32284418
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL
Lt
скажем так, можно указывать и nil в качестве Owner'a. AV возникает в случае указания какого либо класса из exe. соответственно тот класс пытаясь убить форму в dll вызывает ошибку по памяти
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DLL / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]