首页 Delphi 正文
  • 本文约3440字,阅读需17分钟
  • 1829
  • 0
举报该广告
主程序与DLL之间的全局变量

主程序与DLL之间的全局变量

摘要

1. 在Project1.Form1 上拖一 Button

主程序与DLL之间的全局变量

整个 Unit1 源码如下


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IDataModule, StdCt...

1. 在Project1.Form1 上拖一 Button

主程序与DLL之间的全局变量

整个 Unit1 源码如下


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IDataModule, StdCtrls, DB, ADODB, Grids, DBGrids;

type
  TForm1 = class(TForm)
    Button2: TButton;

    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TFunSetIDM = function(aIDM : TIDM) : Boolean;
  TFunShowForm = function(App : TApplication) : TForm;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
    h : THandle;
    FSI : TFunSetIDM;
    FSF : TFunShowForm;
begin
    h := LoadLibrary('Dll.Dll');
    FSI := getprocaddress(h, 'SetIDM');
    FSF := getprocaddress(h, 'ShowForm');
    FSI(IDM);
    FSF(Application);
end;

end.

2. 创建一 DataModule  托一 TADOConnection  控件

主程序与DLL之间的全局变量

 DataModule  源码

unit DataModule;

interface

uses
  SysUtils, Classes, DB, ADODB, IDataModule;

type
  TDM = class(TDataModule, TIDM)
    ADOConnection1: TADOConnection;
  private
    { Private declarations }
  public
    { Public declarations }
    function GetConn : TADOConnection;
  end;

implementation

{$R *.dfm}

{ TDM }

function TDM.GetConn: TADOConnection;
begin
    Result := ADOConnection1;
end;

end.

3.创建一 空的单元命名  IDataModule

主程序与DLL之间的全局变量

IDataModule 源码

unit IDataModule;

interface

uses ADODB;

type
    TIDM = interface
        ['{CE4B0AA7-CE04-4F67-A107-409A5F9DC184}']
        function GetConn : TADOConnection;
    end;

var
    IDM : TIDM;

implementation

end.

4.修改  Project1 源码 如下

program Project1;

uses
  Forms,
  DataModule in 'DataModule.pas' {DM: TDataModule},
  IDataModule in 'IDataModule.pas',
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  //Application.CreateForm(TDM, IDM);  注释
  IDM := TDM.Create(Application); 修改过后
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

5.新建 dll 


主程序与DLL之间的全局变量

dll 源码


library DLL;

{ 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,
  IDataModule in 'IDataModule.pas',
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

function SetIDM(aIDM : TIDM) : Boolean;
begin
    try
        IDM := aIDM;
        Result := True;
    except
        Result := False;
    end;
end;

function ShowForm(App : TApplication) : TForm;
begin
    Application := App;
    Result := TForm(TForm2.Create(Application));
    Result.Show;
end;

exports
    SetIDM,
    ShowForm;

begin

end.

6.dll form 源码



unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids, IDataModule;

type
  TForm2 = class(TForm)
    DBGrid1: TDBGrid;
    Button1: TButton;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
    if IDM.GetConn.Connected then
    begin
       IDM.GetConn.Close;
    end
    else
    begin
        IDM.GetConn.Open;
        ADODataSet1.Connection := IDM.GetConn;
        ADODataSet1.Active := True;
    end;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := cafree;
end;

procedure TForm2.FormShow(Sender: TObject);
begin
    IDM.GetConn.Close;
end;

end.

7.还有一 在dll 在引 一 IDataModule.pas 单元即可


主程序与DLL之间的全局变量


DLL和BPL共享连接.rar 大小1.38MB | 网盘密码: drfd
已经过安全软件检测无毒,请您放心下载

📱 扫码关注公众号

公众号二维码

扫描二维码关注我们,获取更多精彩内容
实时更新 · 干货满满

收藏

扫描二维码,在手机上阅读
评论
更换验证码
友情链接