Hello, please excuse for passing through English.
I use Delphi 7 + Firebird + trial licence Fingerprint SDK 2009 (dll) + scanner crossMatch verifier 300 LC 2.0
Entry into the database and saving works properly, but when reading and comparing (do based on the example) is sometimes an error and only restart helps Delphi
"Canvas does not allow drawing"
noticed that an error occurs during execution - ret: = GrIdentifyPrepare (template.tpt, GR_DEFAULT_CONTEXT);
In what may be a problem. as database search goes well. error occurs even if a scan and totzhe finger a few times.
partial code:
---------------------------
function NewIdentify(var score: Integer): Integer;
Var
ret: Integer;
tmp: String;
numstr: integer;
tptRef: TTemplate;
Begin
if not(TemplateIsValid())then
begin
NewIdentify := ERR_INVALID_TEMPLATE;
exit;
end;
ret := GrIdentifyPrepare(template.tpt, GR_DEFAULT_CONTEXT);
if (ret < 0) then begin
NewIdentify := ret;
exit;
end;
DB.newgetTemplates();
tptRef := DB.newgetNextTemplate();
if tptRef.size > 0 then
repeat
ret := GrIdentify(tptRef.tpt, score, GR_DEFAULT_CONTEXT);
if (ret = GR_MATCH) then
begin
NewIdentify := tptRef.id;
exit;
end
else if (ret < 0) then
begin
NewIdentify := ret;
exit;
end;
tptRef := DB.newgetNextTemplate();
until tptRef.size <= 0;
NewIdentify := GR_NOT_MATCH;
end;
------------------------------
procedure TDBClass.newgetTemplates();
begin
formMain.qFinger.First;
end;
--------------------------------------------
function TDBClass.NewgetNextTemplate(): TTemplate;
Var
tmp: String;
begin
if formMain.qFinger.Eof then
begin
tptBlob.size := -1;
NewgetNextTemplate := tptBlob;
end else
begin
tptBlob.id := formMain.qFinger.FieldByName('IDFINGER').AsInteger;
tmp := formMain.qFinger.FieldByName('ctemplate').AsString;
tptBlob.size := length(tmp);
Move(PChar(tmp)^, tptBlob.tpt^, tptBlob.size);
formMain.qFinger.Next();
NewgetNextTemplate := tptBlob;
end;
end;
------------------------------------------
function TDBClass.NewaddTemplate(template: TTemplate): Integer;
var
rs: TADODataSet;
tptStream: TMemoryStream;
id: Integer;
begin
tptStream := TMemoryStream.Create();
tptStream.write(template.tpt^, template.size);
tptStream.SaveToFile('c:\finger.dat');
formMain.qFinger.Open();
formMain.qFinger.Append();
(formMain.qFinger.FieldByName('ctemplate') as TBlobField).LoadFromStream(tptStream);
//formMain.qFinger.FieldByName('IDFINGER').AsInteger := 1;
formMain.qFinger.FieldByName('pid').AsInteger := 1;
formMain.qFinger.post();
tptStream.Free();
end;
---------------------------------------------
type
TTemplate = class //
public
tpt: Pchar;
size: Integer;
id: Integer;
constructor Create;
destructor Destroy; override;
end;
TDBClass = class
private
dsTemplates: TIBDataSet;
connection: TADOConnection;
tptBlob: TTemplate;
public
function openDB(): boolean;
procedure closeDB();
function NewaddTemplate(template: TTemplate): Integer;
procedure newgetTemplates();
function NewgetNextTemplate(): TTemplate;
end;