WRAPPER - TAPI - DEVLINK
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: WRAPPER - TAPI - DEVLINK
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()
... AS LONG PASCAL FROM "DLOpen" lib "devLink.dll"
a ver si así aparece el MsgInfo()
Re: WRAPPER - TAPI - DEVLINK
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
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
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: WRAPPER - TAPI - DEVLINK
Falta un detalle.
Modifica esta función así:
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
Antonio,
No he conseguido llegar hasta el MessageBox con eso tampoco.
Sin embargo, con el siguiente codigo si llega.
Por otro lado tengo el fichero devlink.h , lo pongo por aqui por si sirve de ayuda.
Un saludo
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
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: WRAPPER - TAPI - DEVLINK
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
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
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
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
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: WRAPPER - TAPI - DEVLINK
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 ) );
#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
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
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
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: WRAPPER - TAPI - DEVLINK
Implementa el callback como yo te indiqué:
viewtopic.php?p=214706#p214706
Y comprueba si aparece el MessageBox()
viewtopic.php?p=214706#p214706
Y comprueba si aparece el MessageBox()
Re: WRAPPER - TAPI - DEVLINK
Buenos dias.
Vamos por partes.
Segun el siguiente codigo
La ejecucion no mostraba ningun mensaje, asi que opte por las acciones que me indicabas.
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 :
Un saludo
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
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: WRAPPER - TAPI - DEVLINK
Falta añadir CALLBACK aqui:
void CALLBACK CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
MessageBox( 0, "ok", "ok", 0 );
}
void CALLBACK CallBackFunction( LONG pbxh, DWORD comms_state, DWORD parm1 )
{
MessageBox( 0, "ok", "ok", 0 );
}
Re: WRAPPER - TAPI - DEVLINK
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.
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
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.
¿ Podrias indicarnos cual es el siguiente paso ?
Muchas gracias por tu ayuda.
Un saludo
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
- Antonio Linares
- Site Admin
- Posts: 42662
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: WRAPPER - TAPI - DEVLINK
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