Создание и использование DLL. Немодальные формы в DLL (окончание)

   
На этом шаге мы рассмотрим еще один способ загрузки немодальных форм из динамически подключаемых библиотек.

   
Код, приведенный на предыдущем шаге, получается довольно громоздким: в главном приложении необходимо реализовывать три функции
вместо одной. Альтернативный вариант можно предложить, исходя из того, что в DLL имеется объект TApplication,
который может поддерживать цикл выборки сообщений. Но в DLL нельзя создать форму, используя метод
TApplication.CreateForm, так как вкладка Forms диалогового окна Options (вызывается командой Project | Options)
отсутствует в проектах Delphi 4, 5, 6, 7 и недоступна в Delphi 3. Однако все методы объекта TApplication можно
вызвать вручную, дописав соответствующий код в DLL:

procedure ShowNMApplication; stdcall;
begin
  if Assigned(Form3) then begin
    Form3.Show;
    Exit;
  end
  else begin
    Application.Initialize;
    Application.CreateForm(TForm3, Form3);
    Application.Run;
    Form3.Free;
    Form3 := nil;
  end;
end;

   
Следует обратить внимание на то, что в данном проекте дескриптор главного приложения не присваивается дескриптору TApplication
в DLL. Это реально приводит к появлению двух кнопок на панели задач. Но в некоторых случаях это полезно - так легче добраться
до окон, перекрытых другими окнами. Интересно, что в Delphi 3 после написания данного кода становятся доступными элементы
управления вкладки Forms диалогового окна Options, где можно определить автоматически создаваемые формы и главную
форму приложения. В более поздних версиях Delphi такая возможность отсутствует.

   
Код главного приложения, использующий данную библиотеку, выглядит следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
var
  HLib: THandle;
  ShowApp: TShowApp;
begin
  HLib:=LoadLibrary('FirstLib.dll');
  if HLib <> 0 then begin
    ShowApp := GetProcAddress(HLib, 'ShowNMApplication');
    if Assigned(ShowApp) then ShowApp;
    Application.ProcessMessages;
    FreeLibrary(HLib);
  end;
end;

Текст этого приложения вместе с DLL можно взять здесь (441,0 Кб).

   
В отличие от примера предыдущего шага, динамическая загрузка библиотеки и ее выгрузка осуществляются в одной функции, да и
объем написанного кода существенно меньше.

   
В COM DLL немодальные формы не отображаются, хотя, скорее всего, это можно сделать.

   
На следующем шаге мы рассмотрим экспорт дочерних форм из DLL.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий