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.
    
  • 相关阅读:
    nyoj----522 Interval (简单树状数组)
    HDUOJ-----2838Cow Sorting(组合树状数组)
    HDUOJ---2642Stars(二维树状数组)
    HDUOJ -----Color the ball
    ACM遇到的问题与解决方案
    ELK架构下利用Kafka Group实现Logstash的高可用
    Linux给力的Shell命令
    i18n 语言码和对应的语言库
    jar启动脚本shell
    持续集成和部署工具GOCD
  • 原文地址:https://www.cnblogs.com/del/p/985900.html
Copyright © 2011-2022 走看看