INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Fri Sep 02, 2022 9:47 am

Buenos dias,

A ver si me podeis ayudar con este proyecto.

Estoy integrando el control de presencia con dispositivos ANVIZ a traves de la DLL (tc-b_new_sdk.dll)


La llamada a la funcion CChex_Update de esta libreria no me funciona.

la estoy realizando de la siguiente manera:

Code: Select all  Expand view  RUN


  public hDLL, cVersion:=0, Anviz_handle:=0, aDatos:=spac(32000), x:=0, tipo:={}

  Anviz_handle:=DllCall( "tc-b_new_sdk.dll", "INT", "CChex_Start")  // Esta llamada funciona bien

   msginfo(Dllcall( "tc-b_new_sdk.dll", "INT", "CChex_Update",Anviz_handle,0,1,aDatos,32000))  

 


Me devuelve -1 que es error

Este es un ejemplo de llamada en C#

Code: Select all  Expand view  RUN


 private void timer1_Tick(object sender, EventArgs e)
        {
            int ret = 0;
            int[] Type = new int[1];
            int[] dev_idx = new int[1];
            IntPtr pBuff;
            int len = 32000;




            pBuff = Marshal.AllocHGlobal(len);
            while (true)
            {
                if (anviz_handle == IntPtr.Zero)
                {
                    break;
                }

               

                ret = AnvizNew.CChex_Update(anviz_handle, dev_idx, Type, pBuff, len);
                //dbg_info("Update~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                if (ret > 0)
                {
                    dbg_info("Msg Type : " +Type[0]);
                    switch (Type[0])
                    {
                        case (int)AnvizNew.MsgType.CCHEX_RET_RECORD_INFO_CARD_BYTE7_TYPE:

....

 


La variable MsgType

Code: Select all  Expand view  RUN

        public enum MsgType : int
        {
            CCHEX_RET_RECORD_INFO_TYPE              = 1,
            CCHEX_RET_DEV_LOGIN_TYPE,
            CCHEX_RET_DEV_LOGOUT_TYPE,
            CCHEX_RET_DLFINGERPRT_TYPE              = 4,
            CCHEX_RET_ULFINGERPRT_TYPE              = 5,
            CCHEX_RET_ULEMPLOYEE_INFO_TYPE          = 6,
            CCHEX_RET_ULEMPLOYEE2_INFO_TYPE         = 7,
            CCHEX_RET_ULEMPLOYEE2_UNICODE_INFO_TYPE = 8,
            CCHEX_RET_LIST_PERSON_INFO_TYPE         = 9,
            CCHEX_RET_MSGGETBYIDX_INFO_TYPE         = 12,
            CCHEX_RET_MSGGETBYIDX_UNICODE_INFO_TYPE = 13,
            CCHEX_RET_MSGADDNEW_INFO_TYPE           = 14,
            CCHEX_RET_MSGADDNEW_UNICODE_INFO_TYPE   = 15,
            CCHEX_RET_MSGDELBYIDX_INFO_TYPE         = 16,
            CCHEX_RET_MSGGETALLHEAD_INFO_TYPE       = 17,

            CCHEX_RET_REBOOT_TYPE                   = 18,
            CCHEX_RET_DEV_STATUS_TYPE               = 19,
            CCHEX_RET_MSGGETALLHEADUNICODE_INFO_TYPE= 20,
            CCHEX_RET_SETTIME_TYPE                  = 21,
            CCHEX_RET_UPLOADFILE_TYPE               = 22,// = 22
            CCHEX_RET_GETNETCFG_TYPE                = 23,
            CCHEX_RET_SETNETCFG_TYPE                = 24,
            CCHEX_RET_GET_SN_TYPE                   = 25,
            CCHEX_RET_SET_SN_TYPE                   = 26,
            CCHEX_RET_DLEMPLOYEE_3_TYPE             = 27, // 761
            CCHEX_RET_ULEMPLOYEE_3_TYPE             = 28, // 761
            CCHEX_RET_GET_BASIC_CFG_TYPE            = 29,
            CCHEX_RET_SET_BASIC_CFG_TYPE            = 30,
            CCHEX_RET_DEL_PERSON_INFO_TYPE          = 31,
            CCHEX_RET_DEL_RECORD_OR_FLAG_INFO_TYPE  = 33,
            CCHEX_RET_MSGGETBYIDX_UNICODE_S_DATE_INFO_TYPE      = 34,
            CCHEX_RET_MSGADDNEW_UNICODE_S_DATE_INFO_TYPE        = 35,
            CCHEX_RET_MSGGETALLHEADUNICODE_S_DATE_INFO_TYPE     = 36,


            CCHEX_RET_GET_BASIC_CFG2_TYPE           = 37,
            CCHEX_RET_SET_BASIC_CFG2_TYPE           = 38,
            CCHEX_RET_GETTIME_TYPE                  = 39,
            CCHEX_RET_INIT_USER_AREA_TYPE           = 40,
            CCHEX_RET_INIT_SYSTEM_TYPE              = 41,
            CCHEX_RET_GET_PERIOD_TIME_TYPE          = 42,
            CCHEX_RET_SET_PERIOD_TIME_TYPE          = 43,
            CCHEX_RET_GET_TEAM_INFO_TYPE            = 44,
            CCHEX_RET_SET_TEAM_INFO_TYPE            = 45,
            CCHEX_RET_ADD_FINGERPRINT_ONLINE_TYPE   = 46,
            CCHEX_RET_FORCED_UNLOCK_TYPE            = 47,
            CCHEX_RET_UDP_SEARCH_DEV_TYPE           = 48,
            CCHEX_RET_UDP_SET_DEV_CONFIG_TYPE       = 49,


            //

            CCHEX_RET_GET_INFOMATION_CODE_TYPE      = 50,
            CCHEX_RET_SET_INFOMATION_CODE_TYPE      = 51,
            CCHEX_RET_GET_BELL_INFO_TYPE            = 52,
            CCHEX_RET_SET_BELL_INFO_TYPE            = 53,
            CCHEX_RET_LIVE_SEND_ATTENDANCE_TYPE     = 54,
            CCHEX_RET_GET_USER_ATTENDANCE_STATUS_TYPE   = 55,
            CCHEX_RET_SET_USER_ATTENDANCE_STATUS_TYPE   = 56,
            CCHEX_RET_CLEAR_ADMINISTRAT_FLAG_TYPE   = 57,
            CCHEX_RET_GET_SPECIAL_STATUS_TYPE       = 58,
            CCHEX_RET_GET_ADMIN_CARD_PWD_TYPE       = 59,
            CCHEX_RET_SET_ADMIN_CARD_PWD_TYPE       = 60,
            CCHEX_RET_GET_DST_PARAM_TYPE            = 61,
            CCHEX_RET_SET_DST_PARAM_TYPE            = 62,
            CCHEX_RET_GET_DEV_EXT_INFO_TYPE         = 63,
            CCHEX_RET_SET_DEV_EXT_INFO_TYPE         = 64,
            CCHEX_RET_GET_BASIC_CFG3_TYPE           = 65,
            CCHEX_RET_SET_BASIC_CFG3_TYPE           = 66,
            CCHEX_RET_CONNECTION_AUTHENTICATION_TYPE    = 67,
            CCHEX_RET_GET_RECORD_NUMBER_TYPE            = 68,
            CCHEX_RET_GET_RECORD_BY_EMPLOYEE_TIME_TYPE  = 69,

            CCHEX_RET_GET_RECORD_INFO_STATUS_TYPE   = 70,
            CCHEX_RET_GET_NEW_RECORD_INFO_TYPE      = 71,

            CCHEX_RET_ULEMPLOYEE2W2_INFO_TYPE       = 72,
            CCHEX_RET_GET_BASIC_CFG5_TYPE           = 73,
            CCHEX_RET_SET_BASIC_CFG5_TYPE           = 74,
            CCHEX_RET_GET_CARD_ID_TYPE              = 75,
            CCHEX_RET_SET_DEV_CURRENT_STATUS_TYPE   = 76,
            CCHEX_RET_GET_URL_TYPE                  = 77,
            CCHEX_RET_SET_URL_TYPE                  = 78,
            CCHEX_RET_GET_STATUS_SWITCH_TYPE        = 79,
            CCHEX_RET_SET_STATUS_SWITCH_TYPE        = 80,
            CCHEX_RET_GET_STATUS_SWITCH_EXT_TYPE    = 81,
            CCHEX_RET_SET_STATUS_SWITCH_EXT_TYPE    = 82,
            CCHEX_RET_UPDATEFILE_STATUS_TYPE        = 83,

            CCHEX_RET_GET_MACHINE_ID_TYPE           = 84,
            CCHEX_RET_SET_MACHINE_ID_TYPE           = 85,

            CCHEX_RET_GET_MACHINE_TYPE_TYPE         = 86,

            CCHEX_RET_UPLOAD_RECORD_TYPE            = 87,

            CCHEX_RET_GET_ONE_EMPLOYEE_INFO_TYPE    = 88,

            CCHEX_RET_ULEMPLOYEE_VER_4_NEWID_TYPE   = 89,

            CCHEX_RET_MANAGE_LOG_RECORD_TYPE        = 90,

            CCHEX_RET_PICTURE_GET_TOTAL_NUMBER_TYPE = 91,
            CCHEX_RET_PICTURE_GET_ALL_HEAD_TYPE = 92,
            CCHEX_RET_PICTURE_GET_DATA_BY_EID_TIME_TYPE = 93,
            CCHEX_RET_PICTURE_DEL_DATA_BY_EID_TIME_TYPE = 94,
            CCHEX_RET_LIVE_SEND_SPECIAL_STATUS_TYPE = 95,

            CCHEX_RET_TM_ALL_RECORD_INFO_TYPE = 150,              //CCHEX_RET_TM_RECORD_INFO_STRU
            CCHEX_RET_TM_NEW_RECORD_INFO_TYPE = 151,              //CCHEX_RET_TM_RECORD_INFO_STRU
            CCHEX_RET_TM_LIVE_SEND_RECORD_INFO_TYPE = 152,              //CCHEX_RET_TM_LIVE_SEND_RECORD_INFO_STRU
            CCHEX_RET_TM_UPLOAD_RECORD_INFO_TYPE = 153,              //CCHEX_RET_TM_UPLOAD_RECORD_STRU
            CCHEX_RET_TM_RECORD_BY_EMPLOYEE_TIME_TYPE = 154,              //CCHEX_RET_TM_RECORD_INFO_STRU


            CCHEX_RET_CLINECT_CONNECT_FAIL_TYPE     = 200,
            CCHEX_RET_DEV_LOGIN_CHANGE_TYPE         = 201,

            CCHEX_RET_RECORD_INFO_CARD_BYTE7_TYPE = 251,
           
            CCHEX_SAC_DOWNLOAD_EMPLOYEE_TYPE        = 301,
            CCHEX_SAC_UPLOAD_EMPLOYEE_TYPE          = 302,
            CCHEX_SAC_DOWNLOAD_GROUP_TYPE           = 303,
            CCHEX_SAC_UPLOAD_GROUP_TYPE             = 304,
            CCHEX_SAC_DOWNLOAD_EMPLOYEE_WITH_GROUP_TYPE         = 305,
            CCHEX_SAC_UPLOAD_EMPLOYEE_WITH_GROUP_TYPE           = 306,
            CCHEX_SAC_GET_DOOR_INFO_TYPE                        = 307,
            CCHEX_SAC_SET_DOOR_INFO_TYPE                        = 308,
            CCHEX_SAC_DOWNLOAD_DOOR_GROUP_TYPE                  = 309,
            CCHEX_SAC_UPLOAD_DOOR_GROUP_TYPE                    = 310,

            CCHEX_SAC_UPLOAD_DOOR_WITH_DOORGROUP_TYPE           = 311,
            CCHEX_SAC_DOWNLOAD_DOOR_WITH_DOORGROUP_TYPE         = 312,
            CCHEX_SAC_DOWNLOAD_TIME_FRAME_INFO_TYPE             = 313,
            CCHEX_SAC_UPLOAD_TIME_FRAME_INFO_TYPE               = 314,
            CCHEX_SAC_DOWNLOAD_TIME_FRAME_GROUP_TYPE            = 315,
            CCHEX_SAC_UPLOAD_TIME_FRAME_GROUP_TYPE              = 316,
            CCHEX_SAC_DOWNLOAD_TIME_FRAME_WITH_TIME_GROUP_TYPE  = 317,
            CCHEX_SAC_UPLOAD_TIME_FRAME_WITH_TIME_GROUP_TYPE    = 318,
            CCHEX_SAC_DOWNLOAD_ACCESS_CONTROL_GROUP_TYPE        = 319,
            CCHEX_SAC_UPLOAD_ACCESS_CONTROL_GROUP_TYPE          = 320,

            CCHEX_SAC_DOWNLOAD_COMMON_TYPE = 401,
            CCHEX_SAC_UPLOAD_COMMON_TYPE = 402,
            CCHEX_SAC_DELETE_COMMON_TYPE = 403,
            CCHEX_SAC_INIT_COMMON_TYPE = 404,
            CCHEX_SAC_PUSH_COMMON_TYPE = 405,
        };
 


Gracias
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Antonio Linares » Fri Sep 02, 2022 3:38 pm

El error en estos casos se debe a que abres y cierras la DLL, cuando lo que debes es mantenerla abierta:

public hDLL := hb_LibLoad( "tc-b_new_sdk.dll" )

a partir de ahi, usa hDLL en vez de "tc-b_new_sdk.dll"
Anviz_handle:=DllCall( hDLL, "INT", "CChex_Start")

etc...

finalmente, haz hb_LibFree( hDLL )
regards, saludos

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

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Sun Sep 04, 2022 7:47 pm

Gracias Antonio.

Ya parece que me va funcionando todas las pruebas que voy realizando excepto la siguiente, que es la mas importante para mi.

Code: Select all  Expand view  RUN

Dllcall( hDLL, "INT", "CChex_Update",Anviz_handle,1,1,aDatos,52)
 


Tengo un ejemplo en C# (Pero no lo conozco mucho).

Code: Select all  Expand view  RUN

private void timer1_Tick(object sender, EventArgs e)
        {
            int ret = 0;
            int[] Type = new int[1];
            int[] dev_idx = new int[1];
            IntPtr pBuff;
            int len = 32000;




            pBuff = Marshal.AllocHGlobal(len);
            while (true)
            {
                if (anviz_handle == IntPtr.Zero)
                {
                    break;
                }


                ret = AnvizNew.CChex_Update(anviz_handle, dev_idx, Type, pBuff, len);
                //dbg_info("Update~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                if (ret > 0)
                {
                    dbg_info("Msg Type : " +Type[0]);
                    switch (Type[0])
                    {
                        case (int)AnvizNew.MsgType.CCHEX_RET_RECORD_INFO_CARD_BYTE7_TYPE:

 


Creo que el problema esta en los dos últimos parámetros.

Alguna ayuda?

Gracias
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Antonio Linares » Sun Sep 04, 2022 11:27 pm

Prueba asi:

cDatos = Space( 32000 )
Dllcall( hDLL, "INT", "CChex_Update",Anviz_handle,1,1,@cDatos,32000)
regards, saludos

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

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Sun Sep 04, 2022 11:55 pm

Llamandolo así me devuelve el error

UNKNOWN Parameter Type!

Por otro lado si no lo paso por referencia me echa del programa sin mensaje de error (Supongo que problema de memoria).

En el ejemplo de C# hace la siguiente llamada

AnvizNew.CChex_Update(anviz_handle, dev_idx, Type, pBuff, len);

y pBuff lo asigna como pBuff = Marshal.AllocHGlobal(len);

Creo que esto lo que hace es reservar un espacio de memoria y eso es lo que le pasa a la funcion.
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Antonio Linares » Mon Sep 05, 2022 6:31 am

Prueba asi:

Code: Select all  Expand view  RUN
cDatos = Space( 32000 )
Dllcall( hDLL, "INT", "CChex_Update",Anviz_handle,1,1, StrToPtr( @cDatos ),32000)

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STRTOPTR )
{
   hb_retnll( ( HB_LONGLONG ) hb_parc( 1 ) );
}

#pragma ENDDUMP
regards, saludos

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

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Mon Sep 05, 2022 7:53 am

Al compilar me daba error y lo he creado así:

Code: Select all  Expand view  RUN

#pragma BEGINDUMP

#include <hbapi.h>
#define HB_LONGLONG LONGLONG

HB_FUNC( STRTOPTR )
{
   hb_retnll( ( HB_LONGLONG ) hb_parc( 1 ) );
}

#pragma ENDDUMP
 


Y lo que hace ahora es cortar la ejecucion del programa sin dar mensaje de error.
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Antonio Linares » Mon Sep 05, 2022 1:30 pm

Mi recomendacion que pruebes via "enlace estático" en vez de "enlace dinámico"

Lo primero es crear una librería de importación a partir de la DLL.

Que compilador de C estás usando ?
regards, saludos

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

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Mon Sep 05, 2022 3:58 pm

Las pruebas las tengo con este:

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland


Aunque tambien he hecho las mismas pruebas con

Embarcadero C++ 7.00 for Win32 Copyright (c) 1993-2015 Embarcadero Technologies, Inc.


Saludos
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Antonio Linares » Mon Sep 05, 2022 9:19 pm

Asi construyes la librería de importación para hacer enlace estático:

c:\bcc7\bin\implib.exe -a tc-b_new_sdk.lib tc-b_new_sdk.dll

Asi obtienes tc-b_new_sdk.lib y ahora vamos a implementar cada función en lenguaje C

la opción -a hace que se añadan subrayados antes de cada nombre de función
regards, saludos

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

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Antonio Linares » Mon Sep 05, 2022 9:36 pm

Para implementar la primera función con la que comenzaste:

go32.bat
Code: Select all  Expand view  RUN
set path=c:\bcc7\bin
c:\harbour\bin\hbmk2 test.hbp -comp=bcc
test.exe


test.hbp
Code: Select all  Expand view  RUN
-gui

-Ic:\fwh\include

test.prg

-Lc:\fwh\lib

-lFiveh
-lFivehC
-ltc-b_new_sdk

-lgdiplus
-lole32
-lOleDlg
-lversion

xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc
 


test.prg
Code: Select all  Expand view  RUN
#include "FiveWin.ch"

function Main()

   MsgInfo( CChex_Version() )

return nil

#pragma BEGINDUMP

#include <hbapi.h>

long CChex_Version( void );

HB_FUNC( CCHEX_VERSION )
{
   hb_retnl( CChex_Version() );
}

#pragma ENDDUMP

funcionando correctamente, devuelve 44
regards, saludos

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

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Mon Sep 05, 2022 11:13 pm

Gracias Antonio por tu ayuda,

He creado la libreria .Lib como me indicas y estoy realizando las llamadas a las funciones como me explicas,
pero no se como hacer las llamadas con parámetros.

Te pongo un ejemplo:

Esta seria la función para conectar con el dispositivo:

Code: Select all  Expand view  RUN

      int CCHex_ClientConnect(IntPtr CchexHandle, byte[] Ip, int Port);
 


si no te importa me podrias poner un ejmplo de como generar el codigo en C de llamada a esa funcion.

Gracias
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Antonio Linares » Tue Sep 06, 2022 5:31 am

Prueba asi:
Code: Select all  Expand view  RUN
#include "FiveWin.ch"

function Main()

   MsgInfo( CChex_Version() )

   CCHex_ClientConnect( nHandle, "ip", nPort )

return nil

#pragma BEGINDUMP

#include <hbapi.h>

long CChex_Version( void );
int CCHex_ClientConnect( int * CchexHandle, byte * Ip, int Port );

HB_FUNC( CCHEX_VERSION )
{
   hb_retnl( CChex_Version() );
}

HB_FUNC( CCHEX_CLIENTCONNECT )
{
   int CchexHandle = hb_parni( 1 );

   hb_retnl( CCHex_ClientConnect( &CchexHandle, ( byte * ) hb_parc( 2 ), hb_parni( 3 ) ) );
}

#pragma ENDDUMP
regards, saludos

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

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Tue Sep 06, 2022 11:29 pm

.
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Re: INTEGRACION CON DLL PARA CONECTAR CON DISPOSITIVOS ANVIZ

Postby Pg_cts » Tue Sep 06, 2022 11:35 pm

Me sigue dando problemas imagino que de memoria ya que se sale del programa al hacer la llamada a CChex_Update sin indicar ningun error.

Actualmente lo estoy llamando asi:

Code: Select all  Expand view  RUN

function EnlaceAnviz()              

    public Anviz_handle:=0
    public tipo:=1, iDx:=1, aDatos:=space(52), nLen:=0
   
    ..................

    nLen:=len(aDatos)
    msginfo(CChex_Update(Anviz_handle,iDx,@tipo,@aDatos,@nLen))
    msginfo(aDatos)

#pragma BEGINDUMP

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

int CChex_Update(long CchexHandle, int idx, int type, long aDatos, int longi);

HB_FUNC( CCHEX_UPDATE )
{

   hb_retnl( CChex_Update( (long) hb_parni( 1 ), (int) hb_parni( 2 ), (int) hb_parni( 3 ), (long) hb_parc( 4 ), (int) hb_parni( 5 ) ) );
}


 


Este es el manual de la libreria de como hacer la llamada:

2.5 CChex_Update
2.5.1 Description functions
【Function】The Return value get or set asynchronously.。
2.5.2 Request
【Mode】int CChex_Update(IntPtr CchexHandle, int[] DevIdx, int[] Type, IntPtr Buff, int Len);
【Parameter】CchexHandle,CChex_Start successfully create the handle,Input[Parameter];
DevIdx,Device index returned asynchronously,Output[Parameter];
Buff,Returned data section,Output [Parameter];
Len,Returns the length of the data section,Input[Parameter];
2.5.3 Response
【Return value】> 0:Successful asynchronous ; Return value == 0:Invalid Return value;< 0:buffer space is not enough,based on Return value, then re-apply the space.
2.5.4 Sample
int ret = CChex_Update(anviz_handle, dev_idx, Type, pBuff, len);
if (ret > 0)
{
switch(Type)
{
case CCHEX_RET_DEV_LOGIN_TYPE: // Connect the Anviz device successfully and return the Device ID, Device IP address, Software version, Device type and software version, etc.
break;
case CCHEX_RET_GET_BASIC_CFG_TYPE: // Some basic information about the Anviz device, such as administrator password, firmware version, volume, etc.
...................

Y este es un ejemplo de como se hace la llamada con c#

Code: Select all  Expand view  RUN

private void timer1_Tick(object sender, EventArgs e)
        {
            int ret = 0;
            int[] Type = new int[1];
            int[] dev_idx = new int[1];
            IntPtr pBuff;
            int len = 32000;




            pBuff = Marshal.AllocHGlobal(len);
            while (true)
            {
                if (anviz_handle == IntPtr.Zero)
                {
                    break;
                }


                ret = AnvizNew.CChex_Update(anviz_handle, dev_idx, Type, pBuff, len);
                //dbg_info("Update~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                if (ret > 0)
                {
                    dbg_info("Msg Type : " +Type[0]);
                    switch (Type[0])
                    {
                        case (int)AnvizNew.MsgType.CCHEX_RET_RECORD_INFO_CARD_BYTE7_TYPE:

 


Gracias por la ayuda.
Pg_cts
 
Posts: 32
Joined: Thu Dec 07, 2017 10:26 am

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 45 guests