Page 1 of 3

WRAPPER - TAPI - DEVLINK

Posted: Tue Sep 04, 2018 9:41 am
by ARC
Buenos dias

Estamos tratando de conectar con la centralita telefonica AVAYA usando DEVLINK y la libreria DEVLINK.DLL

Con esta llamada tratamos de inicar la comunicacion

Code: Select all | Expand


DLL32 function DLOpen(  pbxh AS DWORD , ;
                        pbx_address AS LPSTR,;
                        pbx_password AS LPSTR,;
                        reserved1 AS LPSTR,;
                        reserved2 AS LPSTR,;
                        cb AS COMMSEVENT ) AS LONG  PASCAL FROM "DLOpen" lib "devLink.dll"
 


Nuestro problema es con el parametro "cb AS COMMSEVENT" segun la documentacion, es una funcion de CALLBACK, no sabemos como recoger o tratarlo.En la documentacion esta funcion viene referenciada asi

[img]
https://ibb.co/nzg4ue
[/img]

[img]
https://ibb.co/dQew7z
[/img]

La documentacion completa esta en esta URL
[url]
https://downloads.avaya.com/elmodocs2/i ... dlopen.htm
[/url]

Re: WRAPPER - TAPI - DEVLINK

Posted: Tue Sep 04, 2018 9:15 pm
by Antonio Linares
Adrian,

Ese parámetro es un puntero a una función en C. Un puntero es un número, que es la "dirección" de esa función.
La dirección de una función en lenguaje C es su nombre.

Aqui tienes un ejemplo:

Code: Select all | Expand


// vuestro PRG. Añadid esto al final

#pragma BEGINDUMP

#include <Windows.h>

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

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

#pragma ENDDUMP
 


En la declaración de la función que habeis creado cambiad cb AS COMMSEVENT por cb AS LONG y
llamadla asi:

DLOpen( ..., ..., ..., ..., ..., CallBackFunction() )

Si lo habeis hecho bien, aparecerá un MessageBox() de Windows. Una vez llegueis ahi, os explico como
continuar :-)

Re: WRAPPER - TAPI - DEVLINK

Posted: Wed Sep 05, 2018 8:22 am
by ARC
Genial!

Muchísimas gracias.

Vamos a realizar las acciones que comentas y vemos.

Un saludo

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 06, 2018 7:06 am
by ARC
Buenos días Antonio

Hemos tenido que dejar así las llamadas a las funciones

Code: Select all | Expand


#pragma BEGINDUMP

#include <Windows.h>

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

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


#pragma ENDDUMP
 


Sino, no nos mostraba la llamada al MessageBox.

A partir de aquí , por favor, cuando puedas indícanos como continuar para capturar los eventos que devuelve esta función.

Muchas gracias por tu tiempo.

Un saludo.

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 06, 2018 7:32 am
by Antonio Linares
Así no es correcto.

Daba algún warning o error al compilar mi código ?

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 06, 2018 7:49 am
by ARC
Buenos dias.

Si, da estos warning

Warning W8057 ORDREP.prg 157: Parameter 'pbxh' is never used in function CallBackFunction
Warning W8057 ORDREP.prg 157: Parameter 'comms_state' is never used in function CallBackFunction
Warning W8057 ORDREP.prg 157: Parameter 'parm1' is never used in function CallBackFunction
Warning W8065 ORDREP.prg 161: Call to function 'hb_retnl' with no prototype in function HB_FUN_CALLBACKFUNCTION

Code: Select all | Expand



DLOpen(... , ... , ... , ... , ... , CallBackFunction() )

DLL32 function DLOpen(  pbxh AS DWORD , ;
                        pbx_address AS LPSTR,;
                        pbx_password AS LPSTR,;
                        reserved1 AS LPSTR,;
                        reserved2 AS LPSTR,;
                        cb  AS LONG ) AS LONG  PASCAL FROM "DLOpen" lib "devLink.dll"

#pragma BEGINDUMP

#include <Windows.h>

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

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

#pragma ENDDUMP
 


Al ejecutarlo, no nos mostraba nunca el messageBox.

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 06, 2018 8:42 am
by Antonio Linares
Añade esta línea y vuelve a intentarlo:

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

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 06, 2018 10:27 am
by ARC
Buenas,

ahora siguen saliendo las 3 primeros warning. Pero no nos saca el cuadro dialogo

Warning W8057 ORDREP.prg 158: Parameter 'pbxh' is never used in function CallBackFunction
Warning W8057 ORDREP.prg 158: Parameter 'comms_state' is never used in function CallBackFunction
Warning W8057 ORDREP.prg 158: Parameter 'parm1' is never used in function CallBackFunction


Si el MessageBox lo ponemos en la llamada primera de callbackfunction si lo muestra


Code: Select all | Expand



void CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
   MessageBox( 0, "ok", "ok", 0 ); // AQUI NO MUESTRA EL CUADRO DIALOGO
}

HB_FUNC( CALLBACKFUNCTION )
{
   MessageBox( 0, "ok", "ok", 0 ); // Aqui si muestra
   hb_retnl( ( LONG ) CallBackFunction );
}

 


No consigue ejecutar la siguiente llamada a la función


Un saludo

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 06, 2018 10:51 am
by Antonio Linares
Prueba esto y dime que aparece usando mi código:

MsgInfo( CALLBACKFUNCTION() )

Re: WRAPPER - TAPI - DEVLINK

Posted: Thu Sep 06, 2018 10:52 am
by Antonio Linares
Muéstrame tambien que parámetros le estais pasando concretamente a la llamada a DLOpen()

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 6:10 am
by ARC
Buenos dias!

Code: Select all | Expand


MsgInfo( CALLBACKFUNCTION() ) -> Devuelve el siguiente valor 4200408
 


La llamada a la funcion y sus parametros son estos

Code: Select all | Expand


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


Donde las variables cIp y cPass son tipo char

Un saludo

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 8:26 am
by Antonio Linares
Que valor está devolviendo DLOpen() ?

MsgInfo( DLOpen( ... ) )

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 8:55 am
by ARC
Hola!!

Nada no esta devolviendo nada, no muestra ni siquiera un cuadro dialogo, inicia ejecución y acaba sin dar error y sin mostrar nada.

Code: Select all | Expand



Function main()
local cIp := '10.10.10.10' //es un ejemplo
local cPass := 'passprueba'
      MsgInfo( DLOpen(1,'','',nil,nil, CallBackFunction() ) )
return nil

#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


 


En el proyecto tengo incluidas las libs : DevLinkOmf.lib y DeLink.lib
En la raiz del proyecto esta devlink.dll

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 9:21 am
by Antonio Linares
Comprueba si se genera un archivo *.log

Re: WRAPPER - TAPI - DEVLINK

Posted: Fri Sep 07, 2018 9:24 am
by Antonio Linares
Comenta la llamada a MessageBox():

// MessageBox( 0, "ok", "ok", 0 );

y comprueba si así aparece el MsgInfo()