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

Вниз

Вызов формы из 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.044 c
1-1098554511
eugene32
2004-10-23 22:01
2004.11.07
архивирование


3-1097339186
Cobalt
2004-10-09 20:26
2004.11.07
Различие всяких технологий


14-1098432749
Igorek
2004-10-22 12:12
2004.11.07
Типовая КИС


14-1097834341
iZEN
2004-10-15 13:59
2004.11.07
Windows Terminal Server и Ctrl + Alt + Del


1-1098292996
Dr. Genius
2004-10-20 21:23
2004.11.07
Шрифт MessageBox’ов и InputBox’ов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский