delphi动态调用dll

2020-08-26

unit Unit1;

interface

uses

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Label1: TLabel;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

  SendPatientInfo = procedure(sParam:ansistring); stdcall;//无回参用procedure,有回参用function,我也不知道为什么

var

  Form1: TForm1;

implementation

{$R *.dfm}

var

  FDLL130Handle: THandle;

  DLL130Name: string = 'D:\demo\delphi\Metabolism.dll';

  bStop: boolean;

procedure TForm1.Button1Click(Sender: TObject);

var

  sendPInf:SendPatientInfo;

begin

  FDLL130Handle := Loadlibrary(Pchar(DLL130Name));

  if FDLL130Handle = 0 then

  begin

    ShowMessage(DLL130Name+'不存在');

  Exit;

  end;

  @sendPInf := GetProcAddress(FDLL130Handle, 'SendPatientInfo');

  if @sendPInf = nil then

  begin

    ShowMessage('SendPatientInfo 函数无法获得!');

  end else

  begin

    sendPInf(pchar(Edit1.Text));

  end;

end;

end.


阅读50