• 调用外部 DLL 中的函数(隐式调用)


    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    //MB 函数的声明:   在接口段声明出要调用的dll的函数
    function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
    
    implementation
    
    {$R *.dfm}
    {调用外部 DLL 中的函数,譬如调用系统 user32.dll 中的 MessageBoxA}
    //function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
    //  stdcall; external user32 name 'MessageBoxA';
    
    {其中 user32 是 Delphi 定义的常量 'user32.dll',可以直接写成:}
    //function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
    //  stdcall; external 'user32.dll' name 'MessageBoxA';
    
    {name 后面说明函数的真实名字}
    {external 子句说明单元载入时就加载函数,也就是早绑定;如果晚绑定需要用 LoadLibrary}
    {stdcall 指令表示参数传递是从右到左(Pascal则反之),不通过CPU寄存器传递}
    
    {4个参数的数据类型可以使用对应的 Delphi 数据类型,譬如:}
    //function MB(hWnd: LongWord; lpText, lpCaption: PChar; uType: LongWord): Integer;
    //  stdcall; external 'user32.dll' name 'MessageBoxA';
    
    {或者是:}
    //function MB(hWnd: Cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer;
    //  stdcall; external 'user32.dll' name 'MessageBoxA';
    
    {如果函数在此单元声明后,需要给其他单元调用,需要先在 interface 区声明:}
    //function MB(hWnd: Cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer;
    //  stdcall;
    {本例已经这样做了,如果要测试其他几种情况,需要先注释掉它}
    
    {然后在 implementation 区,说明函数的来源:}
    function MB; external 'user32.dll' name 'MessageBoxA';
    
    //调用测试:    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      t,b:  PChar;
    begin
      t := '标题';
      b := '内容';
      MB(0,b,t,0);
    end;
    
    end.
    
  • 相关阅读:
    华为的管理变革之路
    产品创新型组织变革的四个阶段
    新产品如何在市场上快速取得成功?
    如何做好基础技术的创新?
    产品创新型总经理应具备哪些方面的素质?
    项目型组织如何快速过渡到产品型组织?
    华为是如何做技术规划和产品路标开发的?
    华为干部选拔和任用的标准
    导论:1、大学计算机——2、计算机信息数字化基础——二进制&数字化(数制)
    导论:1、大学计算机——1、计算机与问题求解
  • 原文地址:https://www.cnblogs.com/delphi7456/p/1857150.html
Copyright © 2020-2023  润新知