注意:针对使用C/C++版本的FaceId.dll。代码仅供参考,需要根据具体的设备做调整
运行环境
下载安装Visual C++ Redistributable Packages for Visual Studio 2015
演示程序源代码下载:
程序界面:
示例代码(版本: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.