none
nitgen.sdk.nbiobsp.dll system.stackoverflowexception RRS feed

  • 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
    terça-feira, 13 de março de 2018 11:51

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

    terça-feira, 13 de março de 2018 15:25
  • NBioApi.Type.HFIR eu tenho isso

    public class HFIR : IDisposable 
    {                
        public IntPtr hFIR;                
        public HFIR();                
        public HFIR(IntPtr hNewFIR);                
        ~HFIR();                
        public void Dispose();
    }
    Eu Fiz seu exemplo, minha aplicação parou de funcionar
    terça-feira, 13 de março de 2018 17:14
  • 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


    terça-feira, 13 de março de 2018 21:49
  • Boa tarde,

    Você saberia me informar uma forma de isolar essa dll para que não derrube minha aplicação toda? 

    quarta-feira, 14 de março de 2018 15:01