WRAPPER - TAPI - DEVLINK

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » Fri Sep 07, 2018 9:25 am

Usa:

DLL FUNCTION ...

en vez de

DLL32 FUNCTION ...
regards, saludos

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

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » Fri Sep 07, 2018 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41858
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: WRAPPER - TAPI - DEVLINK

Postby ARC » 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
ARC
 
Posts: 18
Joined: Fri Nov 10, 2017 1:19 pm

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » Fri Sep 07, 2018 8:30 pm

Falta un detalle.

Modifica esta función así:

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

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

Re: WRAPPER - TAPI - DEVLINK

Postby ARC » Tue Sep 11, 2018 9:56 am

Antonio,

No he conseguido llegar hasta el MessageBox con eso tampoco.

Sin embargo, con el siguiente codigo si llega.

Code: Select all  Expand view

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 view

#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
ARC
 
Posts: 18
Joined: Fri Nov 10, 2017 1:19 pm

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41858
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: WRAPPER - TAPI - DEVLINK

Postby ARC » 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
ARC
 
Posts: 18
Joined: Fri Nov 10, 2017 1:19 pm

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » Wed Sep 12, 2018 1: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41858
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: WRAPPER - TAPI - DEVLINK

Postby ARC » Thu Sep 13, 2018 6: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
ARC
 
Posts: 18
Joined: Fri Nov 10, 2017 1:19 pm

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » Thu Sep 13, 2018 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41858
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: WRAPPER - TAPI - DEVLINK

Postby ARC » Thu Sep 13, 2018 9:19 am

Buenos dias.

Vamos por partes.

Segun el siguiente codigo

Code: Select all  Expand view


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 view

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 view

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


Un saludo
ARC
 
Posts: 18
Joined: Fri Nov 10, 2017 1:19 pm

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41858
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: WRAPPER - TAPI - DEVLINK

Postby ARC » Mon Sep 17, 2018 9: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.
ARC
 
Posts: 18
Joined: Fri Nov 10, 2017 1:19 pm

Re: WRAPPER - TAPI - DEVLINK

Postby ARC » Mon Oct 08, 2018 7: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: Select all  Expand view

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
ARC
 
Posts: 18
Joined: Fri Nov 10, 2017 1:19 pm

Re: WRAPPER - TAPI - DEVLINK

Postby Antonio Linares » Mon Oct 08, 2018 7:53 am

Si os funciona correctamente, se agradece que actualiceis FWH desde www.fivetechsoft.com por la ayuda recibida :-)

Code: Select all  Expand view
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
User avatar
Antonio Linares
Site Admin
 
Posts: 41858
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 70 guests