estou desenvolvendo um sistema de que captura a digital por um leitor biometrico usando o Griaule Fingerprint SDK 2007. pensei ter concluido tudo mas percebi que hora ele diz certo de quem é a digital hora ele da erro hora ele nao acha ninquem.. e do nada ele da acess violation.. to usando as sequintes rotinas pra cadastrar..
procedure TRafaelFingerPrinter.Matricular; var id : string; i : integer; tptstream : tmemorystream; handle : hbitmap; hdc : longint; begin if self.FDataset.Active = false then showmessage('Tabela onde vai ser quardada as digitais nao esta ativa') else begin if ExtractTemplate > 0 then begin self.Fdisplay.Picture.Bitmap.FreeImage; handle := self.Fdisplay.Picture.Bitmap.ReleaseHandle; DeleteObject(handle); {$iFOPT R+} {$DEFINE CKRANGE} {$R-} {$ENDIF} hdc := GetDC(hwnd(nil)); {Finger.BiometricDisplay(template.tpt, raw.img, raw.width, raw.height, raw.Res, hdc, handle, GR_NO_CONTEXT);} if handle <> 0 then begin self.display.Picture.Bitmap.Handle := handle; self.display.Repaint; end; ReleaseDC(hwnd(nil), hdc); {$IFDEF CKRANGE} {$UNDEF CKRANGE} {$R+} {$ENDIF} end; //gravando if (((template.size > 0) and (template.tpt <> nil))) then begin self.FDataset.Edit; tptstream := tmemorystream.create(); tptstream.Write(template.tpt^, template.size); (self.Dataset.FieldByName(self.campo) as TBlobField).LoadFromStream(tptstream); tptstream.free; end; end; end; e to usando esta rotina para verificar a digital passada depois de capturar. function TRafaelFingerPrinter.Identificar: boolean; var encontrou : string; tmp : string; score : integer; i : integer; cdc : tclientdataset; ultimo : string; begin encontrou := 'N'; if extracttemplate() >= 0 then begin self.Finger.IdentifyPrepare(template.tpt, GR_DEFAULT_CONTEXT); //abrindo banco de dados cdc := criaclientdataset('select '+self.Fcampo+', '+self.FCanpo_codigo+#13+ 'from '+self.FNomeTabela+#13+ 'where not '+self.FCampo+' is null', self.FConexao, ultimo, CTtquery); cdc.first; while not cdc.eof do begin tmp := cdc.fieldbyname(self.fcampo).asstring; template.size := length(tmp); move(pchar(tmp)^, template.tpt^, template.size); if template.size > 0 then begin if self.Finger.Identify(template.tpt,score,GR_DEFAULT_CONTEXT) = gr_match then begin encontrou := 'S'; self.IDObtido := cdc.fieldbyname(self.FCanpo_codigo).asstring; break; end; end; cdc.next; end; cdc.free; if encontrou = 'N' then showmessage('Digital não encontrada'); end; end; to com pressa de resolver isso e nao to vendo solucao. o exemplo deles é muito confuso, eu tentei usar firebird no exemplo deles e deu a mesma coisa so mudei a forma de gravar os dados e verificar, e fica dando a mesma coisa. nao auterei mas nada no exemplo.. alquem ai ja desenvolveu algo pra isso? pq nao sei mas o que fazer... o prazo ta vencendo e eu nao sei como solucionar isso.. obrigdao. t+ -- ------------------------------------------------------------------- Rafael jorge alves (Analista/desenvolvedor) www.sistemafocus.com.br sistema focus de gestão comercial e serviços em informatica. ------------------------------------------------------------------- [As partes desta mensagem que não continham texto foram removidas]