zoukankan      html  css  js  c++  java
  • 调用外部 DLL 中的函数(1. 早绑定)

    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 函数的声明:
    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.
    
  • 相关阅读:
    最好的在线打字练习网站
    input 的 type 等于 file
    windows 删除文件或文件夹
    nvm 管理 node 版本
    github 的 fork 取消功能
    window cmd 命令行下创建文件夹和文件
    17_10_11 Redis 指令
    17_10_11 Mac 上的brew 安装指令
    17_10_11 运算符&,&&,>> 和 >>>
    17_10_10 乱码问题总结
  • 原文地址:https://www.cnblogs.com/del/p/985900.html
Copyright © 2011-2022 走看看