Delphi:汉王人脸通SDK示例代码(一)执行设备命令

注意:针对使用C/C++版本的FaceId.dll。代码仅供参考,需要根据具体的设备做调整

运行环境

下载安装Visual C++ Redistributable Packages for Visual Studio 2015

演示程序源代码下载:

FaceIdDemo-Delphi-20170907.zip

程序界面:
TcpClientDemo-Delphi

示例代码(版本:Delphi7)

unit TcpClientDemo;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

type
    TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    EditDeviceIP: TEdit;
    EditDevicePort: TEdit;
    ButtonExecute: TButton;
    MemoAnswer: TMemo;
    Label4: TLabel;
    EditSecretKey: TEdit;
    MemoCommand: TMemo;
    Label5: TLabel;
    ButtonClear: TButton;
    procedure ButtonExecuteClick(Sender: TObject);
    procedure ButtonClearClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
    Form1: TForm1;
    ConnectTimeout: Integer;  // 连接超时时间
    DeviceCodePage: Longword; // 设备通信编码字符集
implementation

{$R *.dfm}
// 建立Socket客户端
function FaceId_Start(Const Address:PWideChar; Port:Word; AddressFamily:Integer; millisecondsTimeout:Integer):THandle; stdcall; External 'FaceIdXP.dll'

// 设置通信密钥
function FaceId_SetSecretKey(SocketHandle:THandle; Const SecretKey:PWideChar):Integer; stdcall; External 'FaceIdXP.dll'

// 获取通信密钥
function FaceId_GetSecretKey(SocketHandle:THandle):PWideChar; stdcall; External 'FaceIdXP.dll'

// 执行设备命令
function FaceId_Execute(SocketHandle:THandle; Const InBuffer:PWideChar; out hOutBuffer:PWideChar; CodePage:Longword):Integer; stdcall; External 'FaceIdXP.dll'

// 关闭Socket客户端
procedure FaceId_Close(SocketHandle:THandle); stdcall; External 'FaceIdXP.dll'

// 执行设备命令并显示结果
procedure TForm1.ButtonExecuteClick(Sender: TObject);
var
    SocketHandle: THandle;
    ReceivedChars: Integer;
    hOutBuffer: PWideChar;

begin
    // 创建套接字
    SocketHandle := FaceId_Start(PWideChar(WideString(EditDeviceIP.Text)), StrToInt(EditDevicePort.Text), 2, ConnectTimeout);
    if SocketHandle = 0 then
    begin
      MessageBox(Self.Handle, '请输入正确的设备地址和通信端口!', '警告', MB_OK + MB_IConERROR);
      exit;
    end;

    // 设置通信密码,注意要与设备通信密码一致
    if FaceId_SetSecretKey(SocketHandle, PWideChar(WideString(EditSecretKey.Text))) <> 0 then
    begin
      FaceId_Close(SocketHandle);
      MessageBox(Self.Handle, '设置通信密码失败!', '警告', MB_OK + MB_IConERROR);
      exit;
    end;

    // 清空原有文本
    MemoAnswer.Lines.Clear();
    ReceivedChars := FaceId_Execute(SocketHandle, PWideChar(WideString(MemoCommand.Text)), hOutBuffer, DeviceCodePage);
    if ReceivedChars > 0 then
    begin
      MemoAnswer.Lines.Add(WideCharToString(hOutBuffer)); // 显示命令结果
    end
    else
    begin
      MessageBox(Self.Handle, '执行命令失败!', '错误', MB_OK + MB_IConERROR);
    end;

    // 断开设备连接
    FaceId_Close(SocketHandle);
end;

procedure TForm1.ButtonClearClick(Sender: TObject);
begin
    MemoAnswer.Clear();
end;

initialization
    ConnectTimeout := 1000;
    DeviceCodePage := 936;
end.

Comments are closed.