zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    对获取的DataTable表进行过滤筛选得到DataView
    简单提取iOS13的ipsw固件的内置壁纸(或文件)
    win10设置Python程序定时运行(设置计划任务)
    后端返回一个这种类型的时间格式给前端2020-01-16T09:10:02.349Z
    js把每个词的首字母转大写
    idea连接mysql自动生成实体类
    el自定义函数
    js日期时间格式化
    js大小写转换
    js瞄点
  • 原文地址:https://www.cnblogs.com/leonkin/p/2664509.html
Copyright © 2011-2022 走看看