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

Вниз

Вызов формы из dll   Найти похожие ветки 

 
Koala ©   (2004-10-21 16:09) [0]

Знаю что вопрос заезженый на форуме, вот пытаюсь с этим разобратся...
создал форму на ней 2 lebel и
button ModalResult = mrOK

функция


 function ShowInfo(infData, infName: PChar) : Boolean;
  var
   infoForm : TfmInfo;
 begin
   {Создаем экземпляр infoForm формы TinfoForm}
   infoForm := TfmInfo.Create(Application);
   {В Label выводим сообщения}
   infoForm.lbInfoDate.Caption := StrPas(infData);
   infoForm.lbInfoName.Caption := StrPas(infName);
   {Возвращаем True только если нажата OK (ModalResult = mrOk)}
   Result := (infoForm.ShowModal = mrOk);
   {Освобождаем память}
   infoForm.Free;
 end;

вызов функции:

 function ShowInfo(infD, infN : PChar) : Boolean; stdcall;
 external "info.dll";

implementation

procedure TfmMain.spBtn_TestDllClick(Sender: TObject);
begin
 ShowInfo("текст 1", "текст 2");
end;


при открытии формы в lebel чепуха (почему-то???)

а при закрытии формы ошибка:
Project Test.exe raised exception class EPrivilege with message "Privileged instruction". Process stopped. Use Step or Run to continue.

что не так делаю????


 
Koala ©   (2004-10-21 16:52) [1]

плз... подскажите....


 
Ega23 ©   (2004-10-21 17:01) [2]

1. stdcall зачем?
2. ShowInfo(PChar("текст 1"), PChar("текст 2"));
3. infoForm := TfmInfo.Create(Application);  А какой Application?


 
Koala ©   (2004-10-21 17:13) [3]

Ega23 ©   (21.10.04 17:01) [2]
Огромное спасибо....
Убрал stdcall, добавил PChar и все заработало как надо....


 
Koala ©   (2004-10-21 17:18) [4]

Ega23 ©   (21.10.04 17:01) [2]
вопрос в догонку по поводу п.3 [2]
можно по подробнее...
я брал статью http://delphimaster.ru/articles/usedll/index.html
и по ней разбираюсь...
там:
Пример 4. Размещение формы в DLL
function ShowMyDialog(Msg: PChar): Boolean; stdcall;

...
exports ShowMyDialog;

function ShowMyDialog(Msg: PChar): Boolean;
begin
 {Создаем экземпляр Form1 формы TForm1}
 Form1 := TForm1.Create(Application);
 {В Label1 выводим Msg}
 Form1.Label1.Caption := StrPas(Msg);
 {Возвращаем True только если нажата OK (ModalResult = mrOk)}
 Result := (Form1.ShowModal = mrOk);
 {Освобождаем память}
 Form1.Free;
end;



Если же нужно разместить в DLL немодальную форму, то необходимо сделать две функции - открытия и закрытия формы. При этом нужно заставить DLL запомнить дескриптор этой формы.


 
-=SS=- ©   (2004-10-21 17:58) [5]

library DllProj;

uses
 SysUtils,
 Classes,
 DllForm in "DllForm.pas" {Form1};

{$R *.res}
Function ShowInfo(infData, infName: PChar) : Boolean; export;
Begin
 Form1:=TForm1.Create(Form1);
 Form1.Label1.Caption:=StrPas(InfData);
 Form1.Label2.Caption:=StrPas(infName);
 Result:=True;
End;

Procedure DestroyForm; Export;
Begin
Form1.Free;
Form1:=nil;
End;

begin
end.


 
-=SS=- ©   (2004-10-21 17:59) [6]

unit DllForm;

interface

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

type
 TForm1 = class(TForm)
   Label1: TLabel;
   Button1: TButton;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

end.


 
-=SS=- ©   (2004-10-21 18:02) [7]

unit Test;

interface

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

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

var
 Form1: TForm1;

implementation

{$R *.dfm}

Function ShowInfo(infData, infName: PChar) : Boolean; External "DllProj.dll";
Procedure DestroyForm;  External "DllProj.dll";

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowInfo("info","dara");

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
DestroyForm;
end;

end.


 
-=SS=- ©   (2004-10-21 18:03) [8]

Надеюсь это поможет


 
Koala ©   (2004-10-21 19:53) [9]

-=SS=- ©   (21.10.04 18:03) [8]
Огромнейшее спасибо....



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

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

Наверх




Память: 0.49 MB
Время: 0.041 c
14-1098293854
Murkt
2004-10-20 21:37
2004.11.07
What are movie theaters like in Russia?


1-1098340108
__dmitry
2004-10-21 10:28
2004.11.07
Run time error 216


14-1098046049
vecna
2004-10-18 00:47
2004.11.07
порядок инициализации пропертей


14-1096950942
olookin
2004-10-05 08:35
2004.11.07
Прогнозы на 3-й тур Лиги Чемпионов


1-1098355337
Temporary
2004-10-21 14:42
2004.11.07
Class. Вопросы.