FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour WRAPPER - TAPI - DEVLINK
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 09:25 AM

Usa:

DLL FUNCTION ...

en vez de

DLL32 FUNCTION ...

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 09:26 AM

También prueba a quitar la claúsula PASCAL aqui:

... AS LONG PASCAL FROM "DLOpen" lib "devLink.dll"

a ver si así aparece el MsgInfo()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 18
Joined: Fri Nov 10, 2017 01:19 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 10:12 AM

Hola Antonio.

No genera ningún archivo de log en el directorio.

Con las demás indicaciones no he conseguido tampoco obtener el msginfo().

No se si puedo dar mas información acerca del proyecto.

Si encuentro la forma de hacerlo funcionar por mi cuenta , lo comento.

Muchas gracias.

Un saludo

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 08:30 PM
Falta un detalle.

Modifica esta función así:

Code (fw): Select all Collapse
void CALLBACK CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
   MessageBox( 0, "ok", "ok", 0 );
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 18
Joined: Fri Nov 10, 2017 01:19 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Tue Sep 11, 2018 09:56 AM
Antonio,

No he conseguido llegar hasta el MessageBox con eso tampoco.

Sin embargo, con el siguiente codigo si llega.

Code (fw): Select all Collapse
void CALLBACK CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
   MessageBox( 0, "ok", "ok", 0 );
}

HB_FUNC( CALLBACKFUNCTION )
{
   LONG pbx ;
   DWORD cmms ;
   DWORD par ;
   CallBackFunction(pbx,cmms,par );
}



Por otro lado tengo el fichero devlink.h , lo pongo por aqui por si sirve de ayuda.

Code (fw): Select all Collapse
#ifndef _DEVLINK_H_
#define _DEVLINK_H_

typedef char TEXT;

#define DEVLINK_SUCCESS             0
#define DEVLINK_UNSPECIFIEDFAIL     1
#define DEVLINK_LICENCENOTFOUND     2

#define DEVLINK_COMMS_OPERATIONAL 0
#define DEVLINK_COMMS_NORESPONSE  1
#define DEVLINK_COMMS_REJECTED    2
#define DEVLINK_COMMS_MISSEDPACKETS 3

#ifdef __cplusplus
extern "C"
{
#endif

    typedef void (CALLBACK * DLCALLLOGEVENT)(
    DWORD   pbxh,
    TEXT   * info
    );

typedef void (CALLBACK * DLCOMMSEVENT)(
    DWORD   pbxh,
    DWORD    comms_state,
    DWORD    parm1
    );

LONG  PASCAL  DLOpen( DWORD pbxh
                       , TEXT * pbx_address
                       , TEXT * pbx_password
                       , TEXT * reserved1
                       , TEXT * reserved2
                       , DLCOMMSEVENT cb
                       );
LONG  PASCAL  DLClose( DWORD pbxh );

LONG  PASCAL  DLRegisterType2CallDeltas( DWORD  pbxh, DLCALLLOGEVENT cb );

#ifdef __cplusplus
};
#endif

#endif // _DEVLINK_H_


Un saludo
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Tue Sep 11, 2018 11:17 AM

Cuando el comando DLL FUNCTION ... no consigue nuestro objetivo entonces hay que programar la función enteramente en lenguaje C:

Añade esto a tu PRG y elimina la declaración DLL FUNCTION ...

pragma BEGINDUMP

include <hbapi.h>

include <devlink.h>

HB_FUNC( DLOPEN )
{
DLOpen( hb_parnl( 1 ), hb_parc( 2 ), hb_parc( 3 ), hb_parc( 4 ), hb_parc( 5 ), ( DLCOMMSEVENT ) hb_parnl( 6 ) );
}

pragma ENDDUMP

Para poder enlazar el EXE tienes que crear una librería de importación LIB a partir de la DLL usando implib.exe

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 18
Joined: Fri Nov 10, 2017 01:19 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Wed Sep 12, 2018 10:46 AM

Ya tengo la lib extraida de la dll con implib, esta incluida en el proyecto.

Me da estos errores ahora del .h y en la llamada a la funcion.

Error E2293 \trunk\Include\devlink.h 29: ) expected
Error E2293 \trunk\Include\devlink.h 34: ) expected
Error E2141 \trunk\Include\devlink.h 40: Declaration syntax error
Error E2141 \trunk\Include\devlink.h 47: Declaration syntax error
Error E2141 \trunk\Include\devlink.h 49: Declaration syntax error
Error E2451 ORDREP.prg 163: Undefined symbol 'DLCOMMSEVENT' in function HB_FUN_DLOPEN
Error E2121 ORDREP.prg 163: Function call missing ) in function HB_FUN_DLOPEN

Aqui estoy perdido, he puesto el codigo tal y como decias.

El devlink.h no debe estar con la sitaxis correcta. Desconozco como es.

Gracias por tu ayuda.

Un saludo

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Wed Sep 12, 2018 01:01 PM
Añade esta línea:

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

Y modifica esta línea asi:

DLOpen( hb_parnl( 1 ), ( char * ) hb_parc( 2 ), ( char * ) hb_parc( 3 ), ( char * ) hb_parc( 4 ), ( char * ) hb_parc( 5 ), ( DLCOMMSEVENT ) hb_parnl( 6 ) );
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 18
Joined: Fri Nov 10, 2017 01:19 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 06:54 AM

Buenos días.

Funciona, compila y arranca, ¿cual es el siguiente paso?

Entiendo que ahora necesitaremos capturar los datos del callback.

Muchas gracias por tu ayuda.

Un saludo

Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 08:08 AM

Implementa el callback como yo te indiqué:

viewtopic.php?p=214706#p214706

Y comprueba si aparece el MessageBox()

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 18
Joined: Fri Nov 10, 2017 01:19 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 09:19 AM
Buenos dias.

Vamos por partes.

Segun el siguiente codigo

Code (fw): Select all Collapse
function main()

   DLOpen(1,'255.255.255.255','PWD',nil,nil, CallBackFunction() )

return nil

#pragma BEGINDUMP

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

void CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
   MessageBox( 0, "ok", "ok", 0 );
}

HB_FUNC( CALLBACKFUNCTION )
{
   hb_retnl( ( LONG ) CallBackFunction );
} 

HB_FUNC( DLOPEN )
{
   DLOpen( hb_parnl( 1 ), ( char * ) hb_parc( 2 ), ( char * ) hb_parc( 3 ), ( char * ) hb_parc( 4 ), ( char * ) hb_parc( 5 ), ( DLCOMMSEVENT ) CallBackFunction ) ;
}

HB_FUNC( DLCLOSE )
{
   DLClose( hb_parnl( 1 ) ) ;
}

#pragma ENDDUMP


La ejecucion no mostraba ningun mensaje, asi que opte por las acciones que me indicabas.

Code (fw): Select all Collapse
function main()

   MsgInfo( CallBackFunction() ) // La llamada devuelve ->4200388 , si comento el messagebox , la llamada a este msgInfo me devuelve el mismo valor -> 4200388
   MsgInfo( DLOpen(1,'255.255.255.255','PWD',nil,nil, CallBackFunction() ) // la llamada a la funcion devuelve nil

return nil

#pragma BEGINDUMP

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

void CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
   MessageBox( 0, "ok", "ok", 0 );
}

HB_FUNC( CALLBACKFUNCTION )
{
   hb_retnl( ( LONG ) CallBackFunction );
} 

HB_FUNC( DLOPEN )
{
   DLOpen( hb_parnl( 1 ), ( char * ) hb_parc( 2 ), ( char * ) hb_parc( 3 ), ( char * ) hb_parc( 4 ), ( char * ) hb_parc( 5 ), ( DLCOMMSEVENT ) CallBackFunction ) ;
}

HB_FUNC( DLCLOSE )
{
   DLClose( hb_parnl( 1 ) ) ;
}

#pragma ENDDUMP


El messagebox no aparece en pantalla en ninguno de los casos.

Sin embargo, como te comenté con el siguiente codigo si aparece, pero indicabas que no es correcto :

Code (fw): Select all Collapse
HB_FUNC( CALLBACKFUNCTION )
{
   
   LONG pbxh;
   DWORD comms_state;
   DWORD parm1;
   
   CallBackFunction( pbxh, comms_state, parm1 ); 
}


Un saludo
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 10:57 AM

Falta añadir CALLBACK aqui:

void CALLBACK CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
MessageBox( 0, "ok", "ok", 0 );
}

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 18
Joined: Fri Nov 10, 2017 01:19 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Mon Sep 17, 2018 09:04 AM

Buenos días.

Discúlpame Antonio, no hay manera.

Si pudiera encontrar un ejemplo completo a lo mejor veo algo que estoy haciendo mal.

Muchas gracias por tu ayuda.

Un saludo.

Posts: 18
Joined: Fri Nov 10, 2017 01:19 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Mon Oct 08, 2018 07:27 AM
Buenos dias Antonio.

He conseguido llegar a mostrar el cuadro dialogo con este código que tu mismo proporcionaste.

El problema ha sido el usuario y contraseña, no eran correctos y ademas los permisos para acceder al servidor en el que estaba instalado la maquina.

Code (fw): Select all Collapse
Function main()

      DLOpen(1,cIp , cPass ,nil,nil, CallBackFunction() )

return nil

DLL function DLOpen(  pbxh AS DWORD , ;
                        pbx_address AS LPSTR,;
                        pbx_password AS LPSTR,;
                        reserved1 AS LPSTR,;
                        reserved2 AS LPSTR,;
                        cb  AS LONG ) AS LONG FROM "DLOpen" lib "devLink.dll"
                        
#pragma BEGINDUMP

#include <Windows.h>
#include <hbapi.h>

void CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
   MessageBox( 0, "ok", "ok", 0 );
}

HB_FUNC( CALLBACKFUNCTION )
{
   hb_retnl( ( LONG ) CallBackFunction );
}

#pragma ENDDUMP


¿ Podrias indicarnos cual es el siguiente paso ?

Muchas gracias por tu ayuda.

Un saludo
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM

Re: WRAPPER - TAPI - DEVLINK

Posted: Mon Oct 08, 2018 07:53 AM
Si os funciona correctamente, se agradece que actualiceis FWH desde www.fivetechsoft.com por la ayuda recibida :-)

Code (fw): Select all Collapse
function CommsEvent( nPbxh, nComms_state, nParm1 )

   MsgInfo( nPbhx )
   MsgInfo( nComms_state )
   MsgInfo( nParm1 )

return nil

#pragma BEGINDUMP

#include <Windows.h>
#include <hbapi.h>
#include <hbvm.h>

void CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
  hb_vmPushSymbol( hb_dynsymGetSymbol( "COMMSEVENT" ) );
  hb_vmPushNil();
  hb_vmPushLong( pbhx );
  hb_vmPushLong( comms_state );
  hb_vmPushLong( parm1 );
  hb_vmFunction( 3 );  // 3 parámetros 
}

HB_FUNC( CALLBACKFUNCTION )
{
   hb_retnl( ( LONG ) CallBackFunction );
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com