Funciones en DLL lector biometrico

Funciones en DLL lector biometrico

Postby csincuir » Tue May 17, 2022 1:48 pm

Hola a todos.
No soy muy bueno con C++, y tengo que acceder a un biometrico SeguGen Haster IV
Tengo la dll que me enviaron con el SDK "SecuBSPMx.dll", y tengo este ejemplo en C++
Code: Select all  Expand view  RUN

#include "stdafx.h"
#include "BSPDemo.h"
#include "BSPDemoDlg.h"

// Initialize variables
m_hLib = 0;
m_hBSP = 0;

BOOL OnInitDialog()
{
if (InitSecuBSP())
  m_StatusBar = _T("BSP module initialization success !");
else
  m_StatusBar = _T("BSP module initialization failed !");

return TRUE;  // return TRUE  unless you set the focus to a control
}

//-------------------------------------------------------
bool InitSecuBSP()
{
    CString strSecuBSPMx(_T("SecuBSPMx.dll"));
   m_hLib = LoadLibrary(strSecuBSPMx);
   
   if ( !m_hLib )
   {
       CString strError;
       strError.Format(_T("LoadLibrary failed [%s]; GetLastError[%d];"), strSecuBSPMx, GetLastError());

      return false;
   }
 
   // Basic Functions
   SecuAPI_Init = (FP_SecuAPI_Init) GetProcAddress(m_hLib, "SecuAPI_Init");
   SecuAPI_Terminate = (FP_SecuAPI_Terminate) GetProcAddress(m_hLib, "SecuAPI_Terminate");
 
   // Device Functions
   SecuAPI_EnumerateDevice = (FP_SecuAPI_EnumerateDevice) GetProcAddress(m_hLib, "SecuAPI_EnumerateDevice");
   SecuAPI_OpenDevice = (FP_SecuAPI_OpenDevice) GetProcAddress(m_hLib, "SecuAPI_OpenDevice");
   SecuAPI_CloseDevice = (FP_SecuAPI_CloseDevice) GetProcAddress(m_hLib, "SecuAPI_CloseDevice");
   
   // BSP Functions
   SecuAPI_Capture = (FP_SecuAPI_Capture) GetProcAddress(m_hLib, "SecuAPI_Capture");
   SecuAPI_VerifyMatch = (FP_SecuAPI_VerifyMatch) GetProcAddress(m_hLib, "SecuAPI_VerifyMatch");
   SecuAPI_Enroll = (FP_SecuAPI_Enroll) GetProcAddress(m_hLib, "SecuAPI_Enroll");
   SecuAPI_Verify = (FP_SecuAPI_Verify) GetProcAddress(m_hLib, "SecuAPI_Verify");
   
   SecuAPI_Init(&m_hBSP);

   if (m_hBSP)
      return true;
   else
      return false;
}


Yo trate convertirlo a FWH/Harbour de esta forma, pero me salieron un monto de errores:
Image
Code: Select all  Expand view  RUN

#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

#include "stdafx.h"
#include "BSPDemo.h"
#include "BSPDemoDlg.h"

// Initialize variables
static m_hLib = 0;
static m_hBSP = 0;

//-------------------------------------------------------
HB_FUNC( InitSecuBSP )
//bool CBSPDemoDlg::InitSecuBSP()
{

   m_hLib = LoadLibrary("SecuBSPMx.dll");
   
   if ( !m_hLib )
   {
      return false;
   }
 
   // Basic Functions
   SecuAPI_Init = (FP_SecuAPI_Init) GetProcAddress(m_hLib, "SecuAPI_Init");
   SecuAPI_Terminate = (FP_SecuAPI_Terminate) GetProcAddress(m_hLib, "SecuAPI_Terminate");
 
   // Device Functions
   SecuAPI_EnumerateDevice = (FP_SecuAPI_EnumerateDevice) GetProcAddress(m_hLib, "SecuAPI_EnumerateDevice");
   SecuAPI_OpenDevice = (FP_SecuAPI_OpenDevice) GetProcAddress(m_hLib, "SecuAPI_OpenDevice");
   SecuAPI_CloseDevice = (FP_SecuAPI_CloseDevice) GetProcAddress(m_hLib, "SecuAPI_CloseDevice");
   
   // BSP Functions
   SecuAPI_Capture = (FP_SecuAPI_Capture) GetProcAddress(m_hLib, "SecuAPI_Capture");
   SecuAPI_VerifyMatch = (FP_SecuAPI_VerifyMatch) GetProcAddress(m_hLib, "SecuAPI_VerifyMatch");
   SecuAPI_Enroll = (FP_SecuAPI_Enroll) GetProcAddress(m_hLib, "SecuAPI_Enroll");
   SecuAPI_Verify = (FP_SecuAPI_Verify) GetProcAddress(m_hLib, "SecuAPI_Verify");

   SecuAPI_Init(&m_hBSP);

   if (m_hBSP)
      return .t.;
   else
      return .f.;
}
#pragma ENDDUMP


Estos son los errores que obtuve:
Code: Select all  Expand view  RUN

Warning W8069 .\\source\\SEM3201.PRG 22927: Nonportable pointer conversion in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22931: Undefined symbol 'false' in function HB_FUN_InitSecuBSP
Warning W8081 .\\source\\SEM3201.PRG 22931: void functions may not return a value in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22935: Undefined symbol 'SecuAPI_Init' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22935: Undefined symbol 'FP_SecuAPI_Init' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22935: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22936: Undefined symbol 'SecuAPI_Terminate' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22936: Undefined symbol 'FP_SecuAPI_Terminate' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22936: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22939: Undefined symbol 'SecuAPI_EnumerateDevice' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22939: Undefined symbol 'FP_SecuAPI_EnumerateDevice' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22939: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22940: Undefined symbol 'SecuAPI_OpenDevice' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22940: Undefined symbol 'FP_SecuAPI_OpenDevice' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22940: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22941: Undefined symbol 'SecuAPI_CloseDevice' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22941: Undefined symbol 'FP_SecuAPI_CloseDevice' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22941: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22944: Undefined symbol 'SecuAPI_Capture' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22944: Undefined symbol 'FP_SecuAPI_Capture' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22944: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22945: Undefined symbol 'SecuAPI_VerifyMatch' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22945: Undefined symbol 'FP_SecuAPI_VerifyMatch' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22945: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22946: Undefined symbol 'SecuAPI_Enroll' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22946: Undefined symbol 'FP_SecuAPI_Enroll' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22946: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22947: Undefined symbol 'SecuAPI_Verify' in function HB_FUN_InitSecuBSP
Error E2451 .\\source\\SEM3201.PRG 22947: Undefined symbol 'FP_SecuAPI_Verify' in function HB_FUN_InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22947: Statement missing ; in function HB_FUN_InitSecuBSP
Error E2188 .\\source\\SEM3201.PRG 22952: Expression syntax in function HB_FUN_InitSecuBSP
Warning W8081 .\\source\\SEM3201.PRG 22952: void functions may not return a value in function HB_FUN_InitSecuBSP
Error E2188 .\\source\\SEM3201.PRG 22954: Expression syntax in function HB_FUN_InitSecuBSP
Warning W8081 .\\source\\SEM3201.PRG 22954: void functions may not return a value in function HB_FUN_InitSecuBSP


Podría alguien ayudarme a trasaladar el codigo de C++ a FWH por favor, gracias.

Saludos cordiales.

Carlos Sincuir
csincuir
 
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Funciones en DLL lector biometrico

Postby Antonio Linares » Tue May 17, 2022 3:12 pm

Carlos,

la línea 22919 tienes que cambiarla asi:

static HMODULE m_hLib = NULL;

fijate en los errores, porque ellos te marcan las soluciones :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Funciones en DLL lector biometrico

Postby csincuir » Wed May 18, 2022 12:22 pm

Gracias Antonio por contestar.
Realmente soy malo para el C++, hice lo que me sugeriste y cambien otras cosas:
Code: Select all  Expand view  RUN

#pragma BEGINDUMP

#include <stdio.h>
#include <windows.h>
#include "hbapi.h"

//#include "stdafx.h"
//#include "BSPDemo.h"
//#include "BSPDemoDlg.h"

// Initialize variables
static HMODULE m_hLib = NULL;
static m_hBSP = 0;


static FP_SecuAPI_Init = NULL;
static FP_SecuAPI_Terminate = NULL;
static FP_SecuAPI_EnumerateDevice = NULL;
static FP_SecuAPI_OpenDevice = NULL;
static FP_SecuAPI_CloseDevice = NULL;
static FP_SecuAPI_Capture = NULL;
static FP_SecuAPI_VerifyMatch = NULL;
static FP_SecuAPI_Enroll = NULL;
static FP_SecuAPI_Verify = NULL;

static SecuAPI_Init = NULL;
static SecuAPI_Terminate = NULL;
static SecuAPI_EnumerateDevice = NULL;
static SecuAPI_OpenDevice = NULL;
static SecuAPI_CloseDevice = NULL;
static SecuAPI_Capture = NULL;
static SecuAPI_VerifyMatch = NULL;
static SecuAPI_Enroll = NULL;
static SecuAPI_Verify = NULL;

//-------------------------------------------------------
static void InitSecuBSP( void )
{

   static BOOL bInit = FALSE;
   if( ! bInit )
   {
       m_hLib = LoadLibrary("SecuBSPMx.dll");
       
       //if ( !m_hLib )
       //{
       // return FALSE;
       //}
     
       // Basic Functions
       SecuAPI_Init = (FP_SecuAPI_Init) GetProcAddress(m_hLib, "SecuAPI_Init");
       SecuAPI_Terminate = (FP_SecuAPI_Terminate) GetProcAddress(m_hLib, "SecuAPI_Terminate");
     
       // Device Functions
       SecuAPI_EnumerateDevice = (FP_SecuAPI_EnumerateDevice) GetProcAddress(m_hLib, "SecuAPI_EnumerateDevice");
       SecuAPI_OpenDevice = (FP_SecuAPI_OpenDevice) GetProcAddress(m_hLib, "SecuAPI_OpenDevice");
       SecuAPI_CloseDevice = (FP_SecuAPI_CloseDevice) GetProcAddress(m_hLib, "SecuAPI_CloseDevice");
       
       // BSP Functions
       SecuAPI_Capture = (FP_SecuAPI_Capture) GetProcAddress(m_hLib, "SecuAPI_Capture");
       SecuAPI_VerifyMatch = (FP_SecuAPI_VerifyMatch) GetProcAddress(m_hLib, "SecuAPI_VerifyMatch");
       SecuAPI_Enroll = (FP_SecuAPI_Enroll) GetProcAddress(m_hLib, "SecuAPI_Enroll");
       SecuAPI_Verify = (FP_SecuAPI_Verify) GetProcAddress(m_hLib, "SecuAPI_Verify");

       //SecuAPI_Init(&m_hBSP);
       
       FreeLibrary( m_hLib );
       bInit = TRUE;
    }
}
#pragma ENDDUMP
 


Pero ahora me salen estos errores:
Code: Select all  Expand view  RUN

Error E2379 .\\source\\SEM3201.PRG 22978: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22979: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22982: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22983: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22984: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22987: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22988: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22989: Statement missing ; in function InitSecuBSP
Error E2379 .\\source\\SEM3201.PRG 22990: Statement missing ; in function InitSecuBSP
*** 9 errors in Compile ***

Image

Intente tambien hacer la conexion con el biometrico, usando la forma de VB, pero igual, no logro hacer la conexion:
Code: Select all  Expand view  RUN
oNBioBSP := CreateObject("SecuBSPCOM.APIInterface")

Code: Select all  Expand view  RUN
Error TOleAuto/-1  CO_E_CLASSSTRING: TOLEAUTO:NEW

Llamado desde MYERROR( 60 ) en el modulo: source\ErrorSys.prg
Llamado desde (b)ERRORSYS( 20 ) en el modulo: source\ErrorSys.prg
Llamado desde THROW( 0 )
Llamado desde TOLEAUTO:NEW( 0 ) en el modulo: xhb\xhbole.prg
Llamado desde CREATEOBJECT( 0 ) en el modulo: xhb\xhbole.prg
Llamado desde BIOCAPTURE( 16359 ) en el modulo: .\source\SEM3201.PRG


Como que no se puede acceder a estos biometricos con FWH?

Saludos cordiales.

Carlos.
csincuir
 
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Funciones en DLL lector biometrico

Postby Antonio Linares » Wed May 18, 2022 3:26 pm

Estimado Carlos,

Se puede acceder perfectamente, asi que no desesperes. Vamos a ir arreglando los errores, uno a uno :-)

Cambia esta línea así:

static FP_SecuAPI_Init SecuAPI_Init = NULL;

y haz lo mismo para las otras static. Recuerda que en C, el "tipo" de una variable se escribe antes del nombre de la variable.

Si tienes prisa en tenerlo funcionando, envíame todo y te miro de hacértelo :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Funciones en DLL lector biometrico

Postby csincuir » Wed May 18, 2022 5:25 pm

Antonio, voy a tomar tu palabra, si me pudieras apoyar por favor te lo agradeceré un montón.
https://tssemsa.com/sistemas/tools/SecuGenCpp.zip
En ese link esta todo el proyecto C++ que estoy tratando de portar a FWH, y el archivo donde obtuve el codigo es el "BSPDemoDlg.cpp" y el metodo es InitSecuBSP()

De nuevo, gracias por el apoyo Antonio.

Saludos cordiales,

Carlos
csincuir
 
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Funciones en DLL lector biometrico

Postby Antonio Linares » Wed May 18, 2022 9:12 pm

Carlos,

No me has enviado nada de PRG, luego entiendo que lo que has hecho es lo que has publicado en mensajes anteriores.

Para probarlo necesito tener ese lector, puedes enviarme uno ?

Una vez lo tenga y pruebe el ejemplo, comenzaré a adaptarlo y te diré que tiempo es preciso y el precio del trabajo, gracias
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42203
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Funciones en DLL lector biometrico

Postby csincuir » Wed May 18, 2022 10:06 pm

Antonio, en el ultimo mensaje que envié lo último que he hecho en PRG, que es esto:
Code: Select all  Expand view  RUN


#pragma BEGINDUMP

#include <stdio.h>
#include <windows.h>
#include "hbapi.h"

//#include "stdafx.h"
//#include "BSPDemo.h"
//#include "BSPDemoDlg.h"

// Initialize variables
static HMODULE m_hLib = NULL;
static m_hBSP = 0;


static FP_SecuAPI_Init = NULL;
static FP_SecuAPI_Terminate = NULL;
static FP_SecuAPI_EnumerateDevice = NULL;
static FP_SecuAPI_OpenDevice = NULL;
static FP_SecuAPI_CloseDevice = NULL;
static FP_SecuAPI_Capture = NULL;
static FP_SecuAPI_VerifyMatch = NULL;
static FP_SecuAPI_Enroll = NULL;
static FP_SecuAPI_Verify = NULL;

static SecuAPI_Init = NULL;
static SecuAPI_Terminate = NULL;
static SecuAPI_EnumerateDevice = NULL;
static SecuAPI_OpenDevice = NULL;
static SecuAPI_CloseDevice = NULL;
static SecuAPI_Capture = NULL;
static SecuAPI_VerifyMatch = NULL;
static SecuAPI_Enroll = NULL;
static SecuAPI_Verify = NULL;

//-------------------------------------------------------
static void InitSecuBSP( void )
{

   static BOOL bInit = FALSE;
   if( ! bInit )
   {
       m_hLib = LoadLibrary("SecuBSPMx.dll");
       
       //if ( !m_hLib )
       //{
       // return FALSE;
       //}
     
       // Basic Functions
       SecuAPI_Init = (FP_SecuAPI_Init) GetProcAddress(m_hLib, "SecuAPI_Init");
       SecuAPI_Terminate = (FP_SecuAPI_Terminate) GetProcAddress(m_hLib, "SecuAPI_Terminate");
     
       // Device Functions
       SecuAPI_EnumerateDevice = (FP_SecuAPI_EnumerateDevice) GetProcAddress(m_hLib, "SecuAPI_EnumerateDevice");
       SecuAPI_OpenDevice = (FP_SecuAPI_OpenDevice) GetProcAddress(m_hLib, "SecuAPI_OpenDevice");
       SecuAPI_CloseDevice = (FP_SecuAPI_CloseDevice) GetProcAddress(m_hLib, "SecuAPI_CloseDevice");
       
       // BSP Functions
       SecuAPI_Capture = (FP_SecuAPI_Capture) GetProcAddress(m_hLib, "SecuAPI_Capture");
       SecuAPI_VerifyMatch = (FP_SecuAPI_VerifyMatch) GetProcAddress(m_hLib, "SecuAPI_VerifyMatch");
       SecuAPI_Enroll = (FP_SecuAPI_Enroll) GetProcAddress(m_hLib, "SecuAPI_Enroll");
       SecuAPI_Verify = (FP_SecuAPI_Verify) GetProcAddress(m_hLib, "SecuAPI_Verify");

       //SecuAPI_Init(&m_hBSP);
       
       FreeLibrary( m_hLib );
       bInit = TRUE;
    }
}
#pragma ENDDUMP


Con lo de enviarte un biométrico, eso si esta difícil, el que tengo es del cliente y comprar uno nuevo mas enviarlo a España, imagínate en cuanto saldría eso, yo resido en Guatemala
https://secugen.com/products/hamster-iv/
https://www.amazon.com/-/es/secugen-h%C3%A1mster-esc%C3%A1ner-huella-dactilar/dp/B001P9OWRM

Como te decía, mejor le digo al cliente que no es posible acceder a este tipo de lectores biométricos con FWH.

Pero siempre, te agradezco el apoyo, no hay problema.

Saludos cordiales.

Carlos.
csincuir
 
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Funciones en DLL lector biometrico

Postby Lailton » Mon May 23, 2022 10:51 pm

Hola Carlos,

Tiene el SDK? Tieno visto el fichero pero se falta alguns .h

Envia-me por correo lailton@paysoft.dev y lo preparo un exemplo para ti.

A primeira vista tu codigo carga la DLL y descarga en seguida, tambien te falta los prototype para las chamada.

:D
Regards,
Lailton Fernando Mariano
User avatar
Lailton
 
Posts: 156
Joined: Fri Jul 20, 2012 1:49 am
Location: Brazil

Re: Funciones en DLL lector biometrico

Postby csincuir » Tue May 24, 2022 11:16 am

Hola Laiton, si tengo el SDK, te envié por correo el link de descarga.
Te agradezco la ayuda.

Saludos cordiales

Carlos
csincuir
 
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Funciones en DLL lector biometrico

Postby Lailton » Tue May 24, 2022 1:32 pm

Hola Carlos,

Voy a probar-lo hoy y te comendo aqui lo resultado :D
Regards,
Lailton Fernando Mariano
User avatar
Lailton
 
Posts: 156
Joined: Fri Jul 20, 2012 1:49 am
Location: Brazil

Re: Funciones en DLL lector biometrico

Postby csincuir » Tue May 24, 2022 3:22 pm

Gracias Laiton.
Saludos,
Carlos.
csincuir
 
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 27 guests