谁做过带界面的dll 有例子最好(100)

Discussion in '用户界面' started by yixueying2003, Mar 28, 2009.

  1. yi

    yixueying2003 New Member Member

    如题,目的是想调用dll时能调用出界面
     
  2. zn

    znxia New Member Member

    在DLL中做一个函数,函数中创建界面,有问题吗?
     
  3. yi

    yixueying2003 New Member Member

    没有试过,在程序里Application.CreateForm(TFrmmain, Frmmain);这么创建,那在dll里怎么用呢,能说详细些吗,谢谢了
     
  4. zn

    znxia New Member Member

    可以这么创建啊.还可以 Frmmain:=TFrmmain.Create(application);
     
  5. de

    de410 New Member Member

    一个实例,自己看看了~~在dll中delphi中封装窗体(实例) dll工程library FormDLL;{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }uses SysUtils, Classes, Forms, DLLForm in 'DLLForm.pas' {frmDLL}, dllFrom2 in 'dllFrom2.pas' {Form2};{$R *.res}exports SynAPP,ShowForm;
    begin
    end.
    //dll单元文件一unit DLLForm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,iniFiles;type TfrmDLL = class(TForm) Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private { Private declarations } public { Public declarations } end;
    var frmDLL: TfrmDLL;
    procedure SynAPP(App:THandle);stdcall;
    procedure ShowForm;stdcall;implementationuses Math,dllFrom2;{$R *.dfm}procedure SynAPP(App:THandle );stdcall;
    begin
    Application.Handle := App;
    end;
    procedure ShowForm;stdcall;
    begin
    try frmDLL := TfrmDLL.Create (Application);
    try if frmDLL.ShowModal = idOk then
    begin
    try Form2 := TForm2.Create(Application);
    Form2.ShowModal;
    finally FreeAndnil(Form2);
    end;
    end;
    finally FreeAndNil(frmDLL);
    end;
    except on E: Exceptiondo
    MessageDlg ('Error in DLLForm: ' + E.Message, mtError, [mbOK], 0);
    end;
    end;
    procedure TfrmDLL.Button1Click(Sender: TObject);
    begin
    self.ModalResult := idOk;
    end;
    end.
    dll单元文件二unit dllFrom2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,iniFiles, StdCtrls;type TForm2 = class(TForm) Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private { Private declarations } public { Public declarations } end;
    var Form2: TForm2;implementation{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);var sMsg : string;
    begin
    with TiniFile.Create(ExtractFilePath(paramstr(0)) + 'config.ini')do
    begin
    try sMsg := ReadString('hello','abc','NO');
    ShowMessage(sMsg);
    finally free;
    end;
    end;
    end;
    end.
    测试工程program test;uses Forms, testDLLForm in 'testDLLForm.pas' {Form1};{$R *.res}begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    end.
    //单元文件unit testDLLForm;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,iniFiles;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;procedure SynAPP(App:THandle);stdcall;external 'FormDLL.dll';
    //这里的procedure ShowForm;stdcall;external 'FormDLL.dll';implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    SynAPP(Application.Handle);
    ShowForm ;
    end;
    procedure TForm1.Button2Click(Sender: TObject);var sMsg : string;
    begin
    with TiniFile.Create(ExtractFilePath(paramstr(0)) + 'config.ini')do
    begin
    try sMsg := ReadString('hello','abc','NO');
    ShowMessage(sMsg);
    finally free;
    end;
    end;
    end;
    end.
     
  6. 浪人情哥

    浪人情哥 New Member Member

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=3702571
     
  7. 草原骏马

    草原骏马 New Member Member

    没有问题的。如下:function ShowWarnning(StrXmlData: PChar): integer;
    stdcall;
    export;var FrmWarnning: TForm1;
    begin
    try FrmWarnning := TForm1.Create(nil);
    FrmWarnning.XmlData := StrXmlData;
    FrmWarnning.ShowModal();
    Result := FrmWarnning.iAccept;
    FreeAndNil(FrmWarnning);
    except Result := 0;
    end;
    end;