Delphi辅导:DLL在加载和释放时要做一些事情的问题
来源:优易学  2011-7-3 21:13:13   【优易学:中国教育考试门户网】   资料下载   IT书店
主要在DLLProc中完成
  procedure LibraryProc(Reason: Integer); //注意下面还要设置DllProc的
  begin
  //注意Reason的值:
  // DLL_PROCESS_DETACH = 0;
  // DLL_PROCESS_ATTACH = 1;
  // DLL_THREAD_ATTACH = 2;
  // DLL_THREAD_DETACH = 3;
  //注意 DLL_PROCESS_ATTACH 是不会被自动调用的,初始化还是要写在begin ... end里面
  // 其它三个,包括释放,是有用的
  end;
  begin
  DLLProc:=@LibraryProc; //这个一个要写!!!!
  //初始化代码这里写
  //当然,你也可以这里调用一下 LibraryProc(DLL_PROCESS_ATTACH ),这样上面的函数功能就全了
  end.  
  例子:
  DLL工程
  library Project2;
  uses
  SysUtils,
  Classes,
  Windows,
  Unit1 in \'Unit1.pas\' {Form1};
  {$R *.res}
  var
  slist:TStringList;
  procedure LibraryProc(Reason: Integer); //注意下面还要设置DllProc的
  begin
  if Reason=DLL_PROCESS_DETACH then
  begin
  if Assigned(form1) then
  freeandnil(form1);
  slist:=TStringList.Create;
  slist.Add(\'out\');
  slist.SaveToFile(\'out.txt\');
  slist.Free;
  end;
  end;
  procedure Test; stdcall;
  begin
  if Assigned(form1) then
  form1.ShowModal;
  end;
  exports
  Test;
  begin
  DLLProc:=@LibraryProc;
  form1:=Tform1.Create(nil);
  slist:=TStringList.Create;
  slist.Add(\'in\');
  slist.SaveToFile(\'in.txt\');
  slist.Free;
  end.
  调用DLL的工程
  unit MainUnit1;
  //DLL在加载和释放过程中做些事情
  interface
  uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;  
  procedure Test; stdcall; external \'Project2.dll\';
  type
  TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;
  var
  Form1: TForm1;
  implementation
  {$R *.dfm}
  procedure TForm1.Button1Click(Sender: TObject);
  begin
  Test;
  end;
  end.

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训