• 调用外部 DLL 中的函数(2. 晚绑定)


    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      //晚绑定,也就是动态调用外部函数主要用以下三个命令:
      //LoadLibrary:获取 DLL
      //GetProcAddress:获取函数
      //FreeLibrary:释放

      //定义一个过程类型,参数要和需要的函数一致
      TMB = function(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;

      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        MB: TMB;  {声明函数 MB}
        inst: LongWord;  {声明一个变量来记录要使用的 DLL 句柄}
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      inst := LoadLibrary('user32.dll');
      if inst <> 0 then
        MB := GetProcAddress(inst, 'MessageBoxW');
    //    MB := GetProcAddress(inst, 'MessageBoxA'); {Delphi 2009 之前的版本用这句}
    end;

    //调用测试:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      t,b: PChar;
    begin
      t := '标题';
      b := '内容';
      MB(0, b, t, 0);
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FreeLibrary(inst);  {记得释放}
    end;

    end.
  • 相关阅读:
    基于应用外壳的架构
    示例代码和环境配置
    获取元素位置信息:getBoundingClientRect
    nodejs学习记录
    网页整理 --- 要换工作了,把这一堆网页先存起来
    删除网页上的广告
    周数的处理
    十六进制
    [例]字体改变,文章位置不变
    haslayout和BFC
  • 原文地址:https://www.cnblogs.com/shijiaoyun/p/3844416.html
Copyright © 2020-2023  润新知