• 调用外部 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.
    
  • 相关阅读:
    [分享]一个天气预报的WebService应用实例
    XMLHttpRequest Ajax 实例简介
    CSS选择符
    MSDN SmartCast更改下载步骤
    发掘VS2005 SP1 (二) 更好的支持主题
    .Net+MySQL组合开发(二) 数据访问篇
    最近一打开cnblogs首页,就弹出电影网站!
    今天有点爽
    .Net+MySQL组合开发(三) 乱码篇
    发掘VS2005 SP1 (三) 母模页
  • 原文地址:https://www.cnblogs.com/delphi7456/p/1857150.html
Copyright © 2020-2023  润新知