Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Закрытие окна згружаемого из dll   Найти похожие ветки 

 
Kostafey ©   (2006-10-14 22:52) [0]

Прошу помощи в следующем вопросе.
Необходимо разработать dll которая будет использовать свои окна, при этом закрывая эти окна не должно закрываться окно основного приложения.
Это текст dll (за основу взял пример с вычислением сумммы)

library DLL_WinForm;
uses
 SysUtils,
 Classes,
 Forms,
 Unit1 in "Unit1.pas" {FormDll};

{$R *.res}

/////////////////////////////////////////
function getSum(const n1: integer; const n2: integer): integer;
begin
 Result := n1 + n2;
 Application.CreateForm(TFormDll, FormDll);
 FormDll.Show;
end;

/////////////////////////////////////////
exports
 getSum;

begin
end.

В Unit1 (окно, вызываемое из dll) изменений нет - пустое окно.

Код формы приложения, вызывающего dll:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Unit2;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Label1: TLabel;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
   hModule: THandle;
   // объявляем переменную типа "указатель на функцию"
   pGetSum: function(const n1, n2: integer): integer;
   n: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   hModule := LoadLibrary("DLL_WinForm.dll");
   assert(hModule <> 0, "Can""t load DLL!");

   pGetSum := GetProcAddress(hModule, "getSum");
   assert(@pGetSum <> nil, "Can""t find the getSum function!");
   n := pGetSum(10, 20);
   Label1.Caption:="n = "+ inttostr(n);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if (hModule<>0) then
 begin
   FreeLibrary(hModule);
   hModule:=0;
 end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if (hModule<>0) then
 begin
  FreeLibrary(hModule);
  CanClose:=false;
  hModule:=0;
end;
end;

end.
На форме 2 кнопки:
Button1 - запускает dll и отображается окно (из dll)
Button2 - выгружает dll (окошко благополучно закрывается, но приложение продолжает работать)
А если щелкнуть по кнопке (X) закрытия окна dll, то происходит закрытие не только окна dll, но и окна самого приложения.

ВОПРОС: как сделать так чтобы при закрытии dll-окна проложение бы не закрывалось.


 
vain ©   (2006-10-14 23:18) [1]

Я тебе на мыло скинул пример к книге Фаронова по работе с dll с формами. Я думаю, разобраться сможешь.


 
Kostafey ©   (2006-10-14 23:24) [2]

> [1] vain ©   (14.10.06 23:18)

Спасибо огромное, похоже это то что нужно !


 
Leonid Troyanovsky ©   (2006-10-15 10:04) [3]


> vain ©   (14.10.06 23:18) [1]

> Я тебе на мыло скинул пример к книге Фаронова по работе
> с dll с формами. Я думаю,


И мне скинь, плиз, lv.t@rambler.ru
Или, если он невелик, то сюда.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.037 c
15-1160113168
Pazitron_Brain
2006-10-06 09:39
2006.10.29
Аномальные проблемы с компьютером


15-1160141120
partizan
2006-10-06 17:25
2006.10.29
Посоветуйте книгу по криптографии


1-1158567014
dmitry kholl
2006-09-18 12:10
2006.10.29
Бездействие с программой


15-1160483134
SergP.
2006-10-10 16:25
2006.10.29
В чем могут быть проблемы если Oracle 9i не ставится?


3-1157027805
Orxan
2006-08-31 16:36
2006.10.29
tnsnames.ora