Page 2 of 3

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 9:25 am
by Antonio Linares
Usa:

DLL FUNCTION ...

en vez de

DLL32 FUNCTION ...

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 9:26 am
by Antonio Linares
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()

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 10:12 am
by ARC
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

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 8:30 pm
by Antonio Linares
Falta un detalle.

Modifica esta función así:

Code: Select all | Expand

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

Re: WRAPPER - TAPI - DEVLINK

Posted: Tue Sep 11, 2018 9:56 am
by ARC
Antonio,

No he conseguido llegar hasta el MessageBox con eso tampoco.

Sin embargo, con el siguiente codigo si llega.

Code: Select all | Expand


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: Select all | Expand


#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

Re: WRAPPER - TAPI - DEVLINK

Posted: Tue Sep 11, 2018 11:17 am
by Antonio Linares
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

Re: WRAPPER - TAPI - DEVLINK

Posted: Wed Sep 12, 2018 10:46 am
by ARC
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

Re: WRAPPER - TAPI - DEVLINK

Posted: Wed Sep 12, 2018 1:01 pm
by Antonio Linares
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 ) );

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 6:54 am
by ARC
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

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 8:08 am
by Antonio Linares
Implementa el callback como yo te indiqué:

viewtopic.php?p=214706#p214706

Y comprueba si aparece el MessageBox()

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 9:19 am
by ARC
Buenos dias.

Vamos por partes.

Segun el siguiente codigo

Code: Select all | Expand



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: Select all | Expand


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: Select all | Expand


HB_FUNC( CALLBACKFUNCTION )
{
   
   LONG pbxh;
   DWORD comms_state;
   DWORD parm1;
   
   CallBackFunction( pbxh, comms_state, parm1 );
}
 


Un saludo

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 13, 2018 10:57 am
by Antonio Linares
Falta añadir CALLBACK aqui:

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

Re: WRAPPER - TAPI - DEVLINK

Posted: Mon Sep 17, 2018 9:04 am
by ARC
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.

Re: WRAPPER - TAPI - DEVLINK

Posted: Mon Oct 08, 2018 7:27 am
by ARC
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: Select all | Expand


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

Re: WRAPPER - TAPI - DEVLINK

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

Code: Select all | Expand

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