Форум: "Основная";
Текущий архив: 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.03 c