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.
    
  • 相关阅读:
    spring3: Bean的命名与Bean的实例化
    极客软件测试52讲总结分享
    如何有效地搭建测试环境?
    用xshell 连接docker Linux服务器
    python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告
    CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
    jenkins 关联 钉钉机器人
    Jenkins pipeline 语法详解
    jenkins 添加 证书凭证Credentials
    项目中使用的S2SH整合中使用的struts.xml(参考模板)
  • 原文地址:https://www.cnblogs.com/del/p/985900.html
Copyright © 2011-2022 走看看