Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Закрытие окна згружаемого из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.041 c
15-1160051525
vidiv
2006-10-05 16:32
2006.10.29
Глюк со звуком... толи с винампом


15-1159610047
Сатир
2006-09-30 13:54
2006.10.29
Соц. опрос


2-1160000563
alex_sz
2006-10-05 02:22
2006.10.29
Не удаляется из памяти поток MemoryStream


2-1160709419
Steep
2006-10-13 07:16
2006.10.29
Units Again


8-1143445304
zxcv
2006-03-27 11:41
2006.10.29
Chart 3D





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский