Inquiridor
nitgen.sdk.nbiobsp.dll system.stackoverflowexception

Pergunta
-
Boa tarde senhores,
Estou com uma Exception em uma DLL de terceiros, como faço para que a mesma não derrube a minha aplicação?
Verifiquei todos os manuais da Nitgen, nenhuma se refere a esse erro de estouro de memoria :-/ certamente estou fazendo algo errado, aguem ai tem experiencia com essa DLL em especifico?
public class FindlerManager { public NBioAPI Api; public NBioAPI.IndexSearch indexSearch; BioContext data; public string Erro = string.Empty; public string caminho = @"bdbiometric.ISDB"; private bool IsUse = false; NBioAPI.Type.HFIR hCapturedFir = new NBioAPI.Type.HFIR(); private static Logger logger = LogManager.GetCurrentClassLogger(); public FindlerManager() { try { Api = new NBioAPI(); indexSearch = new NBioAPI.IndexSearch(Api); logger.Info("Iniciado comunicação com Api Nitgen"); } catch (Exception e) { logger.Fatal("Falha na DLL" + e); } } public bool Open() { var ret = indexSearch.InitEngine(); if (ret != NBioAPI.Error.NONE) { Erro = ret.ToString(); logger.Error("Erro na Api:" + ret); return false; } var version = new NBioAPI.Type.VERSION(); data = new BioContext(@"bdbiometric.ISDB", indexSearch, Api); Api.GetVersion(out version); return true; } public bool RegisterBiometric(int idcolaborador) { if (IsUse) { return false; } IsUse = true; NBioAPI.Type.HFIR hNewFIR; var nUserID = (uint)idcolaborador; //uint tempret = indexSearch.RemoveUser(nUserID); // Get FIR data Api.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); var ret = Api.Enroll(out hNewFIR, null); if (ret != NBioAPI.Error.NONE) { Erro = ret.ToString(); Api.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); return false; } Api.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); // Regist FIR to IndexSearch DB NBioAPI.IndexSearch.FP_INFO[] fpInfo; ret = indexSearch.AddFIR(hNewFIR, nUserID, out fpInfo); if (ret != NBioAPI.Error.NONE) { Erro = ret.ToString(); return false; } data.Update(); IsUse = false; return true; } public int Identificar() { if (IsUse) { return 0; } IsUse = true; try { //Abre o dipositivo var ret = Api.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); //Verifica se existe erro no dispositivo aberto if (ret != NBioAPI.Error.NONE) { Erro = ret.ToString(); Api.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); IsUse = false; logger.Error("Erro na Api:" + ret); Thread.Sleep(2000); return 0; } logger.Info("Dispositivo aberto"); logger.Info("Capturado a digital "); ret = Api.Capture(out hCapturedFir, 10000, new NBioAPI.Type.WINDOW_OPTION()); //Verifica se exite erro na captura if (ret != NBioAPI.Error.NONE) { Erro = ret.ToString(); Api.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); IsUse = false; logger.Error("Erro na Api:" + ret); Thread.Sleep(2000); return 0; } //Fecha o dipositivo Api.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); logger.Info("Dispositivo Fechado"); //Identifica a digital no banco de dados var cbInfo0 = new NBioAPI.IndexSearch.CALLBACK_INFO_0(); NBioAPI.IndexSearch.FP_INFO fpInfo; ret = indexSearch.IdentifyData(hCapturedFir, NBioAPI.Type.FIR_SECURITY_LEVEL.NORMAL, out fpInfo, cbInfo0); hCapturedFir.Dispose(); logger.Info("Lendo ISDB"); if (ret != NBioAPI.Error.NONE) { Erro = ret.ToString(); IsUse = false; logger.Error("Erro na Api:" + ret); Thread.Sleep(2000); return 0; } IsUse = false; return (int)fpInfo.ID; } catch (Exception e) { logger.Error("Erro no identificar" + e.Message); return 0; } } public bool Pressionado(out string erro) { if (IsUse) { erro = ConstantesFinger.EmUso; logger.Error("Dispositivo em uso"); return false; } Api.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO); logger.Info("Dispositivo Aberto"); var check = false; logger.Info("Verifica se existe um dedo posicionado no sensor"); var errro = Api.CheckFinger(out check); if (errro == NBioAPI.Error.DEVICE_NOT_OPENED) { erro = ConstantesFinger.LeitorNaoAbriu; logger.Error("Dispositivo não abriu"); return false; } if (errro == NBioAPI.Error.LOWVERSION_DRIVER) { erro = ConstantesFinger.DriverNaoSuportado; logger.Error("Driver não suportado"); return false; } logger.Info("Dispositivo Fechou"); Api.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); erro = string.Empty; return check; } public void Closed() { IsUse = true; Api.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO); } }
- Editado José matheus terça-feira, 13 de março de 2018 16:28 Coloquei o código para melhor entendimento
Todas as Respostas
-
Olá, nunca usei esta DLL, mas eu tentaria o seguinte, na declaração da DLL eu não usaria NULL e sim o NEW;
NBioApi.Type.HFIR hCapturedFir = new NBioApi.Type.HFIR();
hCapturedFir = string.Empty;
Se não funcionar continue postando o erro para podermos ajudá-lo;
Abs!
Leandro de Agostini MCTS - Web Application, Framework 4
-
-
Olá, veja se este link te ajuda.
https://www.devmedia.com.br/utilizando-biometria-em-net/4486
https://social.msdn.microsoft.com/Forums/vstudio/pt-BR/a58d9bd6-e14e-4f2c-9ae2-6d636998124f/utilizao-do-leitor-biomtrico-modelo-nitgen-hfdu14?forum=vsvbasicpt
Abs!
Leandro de Agostini MCTS - Web Application, Framework 4
- Editado Leandro de Agostini terça-feira, 13 de março de 2018 21:49 Faltou um link
-