Delphi封装类到DLL

一个公共单元

unit ITest;
 
 interface
 
 type
   IT = interface
     function GetString:string;
     procedure ShowMsg(p:PChar);
     procedure Msg;
   end;
 
 implementation
 
 end.

类单元,这个写在DLL里面的

unit UTest;
 
 interface
 
 uses
   SysUtils,
   Windows,
   ITest;
 
 type
   TTest = class(TInterfacedObject,IT)
   private
     i:Integer;
   protected
 
   public
     constructor Create; //override;
     destructor Destroy; override;
     function GetString:string;
     procedure ShowMsg(p:PChar);
     procedure Msg;
   published
 
   end;    
 
 implementation
 
 constructor TTest.Create;
 begin
   i:=0;
 end;
 
 destructor TTest.Destroy;
 begin
   inherited;
 end;
 
 function TTest.GetString:string;
 begin
   Result := 'Test string';
 end;
 
 procedure TTest.ShowMsg(p:PChar);
 begin
   MessageBox(0,p,'Test',MB_OK);
 end;
 
 procedure TTest.Msg;
 begin
   Inc(i);
   MessageBox(0,'Test MessageBox',PChar(IntToStr(i)),MB_OK);
 end;
 
 end.

DLL的prj

library Test;
 
 uses
   SysUtils,
   Classes,
   ITest in 'ITest.pas',
   UTest in 'UTest.pas';
 
 {$R *.res}
 
 function TestCreate:IT; stdcall;
 begin
   Result := TTest.Create;
 end;  
 
 exports
   TestCreate; //用此初始化
 
 begin
 end.

DLL部分就这样了,到EXE部分调用

uses
   ITest;  //引用单元
 
 function TestCreate:IT; stdcall; external 'Test.dll' name 'TestCreate'; //引用DLL函数
 
 //声明作为测试
   private
     AA:IT;
     BB:IT;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   AA:= TestCreate;
   BB:= TestCreate;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   Button1.Caption := AA.GetString;
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 begin
   AA.ShowMsg('123abc');
 end;
 
 procedure TForm1.Button3Click(Sender: TObject);
 begin
   AA.Msg;
 end;
 
 procedure TForm1.Button4Click(Sender: TObject);
 begin
   BB.Msg;
 end;
原文地址:https://www.cnblogs.com/leonkin/p/2664509.html