Я пытаюсь заставить мой пример devlink C ++ работать с моим AVAYA IP500, и соединение, кажется, работает нормально, функция DLOpen работает хорошо, и также вызывается функция обратного вызова, но когда я вызываю DLRegisterType2CallDeltas для получения журнала событий, он возвращает0 (DEVLINK_SUCCESS) и функция обратного вызова никогда не вызывается.
Как вы можете видеть, сообщение "Обнаружено событие" никогда не отображается в консоли, я тоже поставил точки останова в этой строке и ничего.
У меня активна лицензия CTI Pro и настроен поставщик услуг TAPI для моего компьютера
Пожалуйста, помогите.
Это код devlink.h
#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_
А вот мой основной код
#include "pch.h"
#include <windows.h>
#include <stdio.h>
#include "devlink.h"
HANDLE hEvent;
DWORD dwCommsEvent;
BOOL bStarting;
void CALLBACK HandleDelta2Event(DWORD pbxh, char* switchInfo)
{
printf("An event has been detected\n");
}
void CALLBACK HandleCommsEvent(DWORD pbxh, DWORD comms_evt, DWORD parm1)
{
printf("event: %d - %d\n", comms_evt, parm1);
switch (comms_evt)
{
case DEVLINK_COMMS_OPERATIONAL:
// we are working fine ... fall through
case DEVLINK_COMMS_NORESPONSE:
// system not found (initial connection),
// or network connection lost (rebooted ?)
// fall through ...
case DEVLINK_COMMS_REJECTED:
// incorrect system password speciffied
if (bStarting)
{
dwCommsEvent = comms_evt;
SetEvent(hEvent);
}
else
{
}
break;
case DEVLINK_COMMS_MISSEDPACKETS:
// Indicates that system is under heavy load.
// IP Office always priorities data routing
// and call handling above CTI events
// (parm1 contains nnumber of packets missed)
break;
}
}
int main(int argc, char* argv[])
{
bool enter = false;
long res;
printf("connecting...");
bStarting = TRUE;
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
char swp[] = "[My IP500 IP]";
char pw[] = "[Security user password]";
DLOpen(0, swp, pw, NULL, NULL, HandleCommsEvent);
dwCommsEvent = DEVLINK_COMMS_NORESPONSE;
WaitForSingleObject(hEvent, 10000); // 10 seconds
bStarting = FALSE;
if (dwCommsEvent == DEVLINK_COMMS_OPERATIONAL)
{
printf("Connected OK\n");
printf("Waiting for event\n");
while (!enter)
{
res = DLRegisterType2CallDeltas(0, HandleDelta2Event);
printf("Code: %d\n", res);
}
}
else
{
printf("Error connecting to IP Office\n");
}
DLClose(0);
CloseHandle(hEvent);
return 0;
}
Мой вывод похож на следующий
connecting...event:0 - 0
event: 3 - -1
Connected OK
Waiting for event
code: 0
code: 0
code: 0
code: 0
code: 0
... keeps forever
event: 1 - 0
event: 0 - 0
event: 3 - -1
code: 0
code: 0
code: 0
code: 0
code: 0
... keeps forever