powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TAPI поднять/положить трубку
18 сообщений из 18, страница 1 из 1
TAPI поднять/положить трубку
    #37995202
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день уважаемые, столкнулся со следующей проблемой.
Есть приложение в котором исользуется tapi для звонков, с этим проблем нет, регистрируюсь на линии, совершаю звонки, отлавливаю статусы звонков, но никак не получается из софтины поднять трубку.

Почитал форум, примеры, msdn, даже сделал это в .Net, но вот на vb6(нужно именно на нем) никак не полчается

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim Line_ As ITAddress2
 '------   
 '...
 '------   
 Dim a2 As ITBasicCallControl2
 Dim b2 As ITCallInfo2
    
 If Line_.Calls.Count > 0 Then
    Set b2 = Line_.Calls(1)
    Set a2 = b2
 End If


Line_ соответственно зарегистрирована.
Сразу бросается в глаза что a2 и b2 разных типов, но вот во всех применрах что я нашел(а они на .net) прекрастно работают

Код: plaintext
1.
2.
ITCallInfo ici;
ITBasicCallControl bcc=(TAPI3Lib.ITBasicCallControl)ici;


Может кто сталкивался, не подскажете как из треклятого ITCallInfo2 получить или вытащить ITBasicCallControl2
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37995207
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
Set a2 = b2


Здесь соответственно исключение
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37995390
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
airmaxxx,

ITBasicCallControl2 interfaceThe ITBasicCallControl2 interface is created by calling QueryInterface on ITCallInfo.ITCallInfo2 interfaceThe ITCallInfo2 interface is an extension of the ITCallInfo interface.QueryInterface в VB6 делаеЦЦа при Set, так что в теории
Код: vbnet
1.
2.
3.
4.
 Dim a2 As ITBasicCallControl2
 Dim b2 As ITCallInfo2
...
 Set a2 = b2

должно работать. На практике - хз, надо бы смотреть по крайней мере 2 вещи:
1) действительно ли конкретный объект, поддерживающий ITCallInfo[2], поддерживает ITBasicCallControl2, то есть не возвращает ли ITCallInfo::QueryInterface(IID_ITBasicCallControl2) код E_NOINTERFACE;
2) параноидальное предположение, но: правильный ли IID у ITBasicCallControl2 в используемой в VB6 библиотеке типов? И что это за библиотека типов, кстати?
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37995442
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЦЦадолжно работать. На практике - хз, надо бы смотреть по крайней мере 2 вещи:
1) действительно ли конкретный объект, поддерживающий ITCallInfo[2], поддерживает ITBasicCallControl2, то есть не возвращает ли ITCallInfo::QueryInterface(IID_ITBasicCallControl2) код E_NOINTERFACE;
2) параноидальное предположение, но: правильный ли IID у ITBasicCallControl2 в используемой в VB6 библиотеке типов? И что это за библиотека типов, кстати?

1) Вообще должно поддерживаться, во всех примерах что находил было сделано именно так, даже нашел пример на vb6, но к слову там тоже исключение на месте присвоения, хотя собо в код не углублялся, но вот ссылочка
http://www.tapi.info/default.aspx/TAPI/PSDKSamples.html
Incoming - TAPI 3.0 INCOMING Sample Application

2) биьлиотека tapi3.dll, она стандартная лежит в Windows\system32\tapi3.dll
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37995801
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
airmaxxx,

да, есть в Platform SDK такой пример, причём с комментариями:
Код: vbnet
1.
2.
3.
4.
5.
6.
            'Note: objCallNotificationEvent.Call actually contains an
            'ITCallInfo interface, but by assigning it to an ITBasicCallControl
            'interface, we actually query for the interface "ITBasicCallControl"
            Dim objReceivedCallControl As ITBasicCallControl
            
            Set objReceivedCallControl = objCallNotificationEvent.Call



Я бы всё-таки проверил явно код возврата QueryInterface, примерно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
 Dim a2 As TAPI3Lib.ITBasicCallControl2
 Dim b2 As TAPI3Lib.ITCallInfo2
'...
'Set b2 = ...

 Dim hr As Long
 Dim Unk As olelib.IUnknown
 Dim IID_ITBasicCallControl2 As olelib.UUID
 Const IIDSTR_ITBasicCallControl2 = "{161A4A56-1E99-4b3f-A46A-168F38A5EE4C}"
 
 Set Unk = b2
 CLSIDFromString IIDSTR_ITBasicCallControl2, IID_ITBasicCallControl2
 hr = Unk.QueryInterface(IID_ITBasicCallControl2, a2) 'или вместо a2 какой-нибудь Unk2 As olelib.IUnknown
 Select Case hr
 Case S_OK
    'всё нормально
    '...
 Case E_NOINTERFACE
    'интерфейс не поддерживается
    '...
 Case Else
    'другая ошибка
    '...
 End Select
 
 Set a2 = Nothing
 Set Unk = Nothing


Если код возврата будет E_NOINTERFACE, попробовать запросить ITBasicCallControl, как в Incoming.

olelib здесь .
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998162
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hr Unk.QueryInterface(IID_ITBasicCallControl2, a2) возвращает -2147467262 и со-но и в одну из ветвей кейса не заходит.
Что делать с этим калл контролом и калл инфо совершенно непонятно.
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998179
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибся, как раз заходит по ветке E_NOINTERFACE, то есть интерфейс не поддрерживается.
Но в примерах же делается подобное, и как то это работает... куда дальше мне копать то?
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998184
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЦЦаЕсли код возврата будет E_NOINTERFACE, попробовать запросить ITBasicCallControl, как в Incoming.


пробывал, то же самое.
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998285
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://computer-programming-forum.com/64-vb-com/3d1ce8ecfedef46b.htm
http://bit.pirit.info/forum/viewtopic.php?t=7263
http://bbs.vbstreets.ru/viewtopic.php?f=1&t=4827

везде схожие примеры, но ITCallInfo никак не хочет конвертиться в ITBasicCallControl, в чем же подвох?
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998488
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы для начала определитесь, что вам нужно, ITBasicCallControl или ITBasicCallControl2 это все-таки разные вещи. В примерах фигурирует ITBasicCallControl, кто дал гарантии что тоже самое будет работать с ITBasicCallControl2?

airmaxxx ITCallInfo никак не хочет конвертиться в ITBasicCallControl, в чем же подвох?В такой постановке вопрос тянет на двойку по информатике. Это разные интерфейсы и один не может быть сконвертирован во второй в принципе. Это же основы ООП.
Другое дело объект. Я хз, что вы там делаете, но
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
'это:

Dim objReceivedCallControl As ITBasicCallControl
Set objReceivedCallControl = objCallNotificationEvent.Call

'по идее тоже самое, что это (рекомендую попробовать):

Dim objReceivedCallControl As ITBasicCallControl, objCall as Object
Set objCall = objCallNotificationEvent.Call
Set objReceivedCallControl = objCall 

'а это: 

Dim objReceivedCallControl As ITBasicCallControl, objCall as ITCallInfo 
Set objCall = objCallNotificationEvent.Call
Set objReceivedCallControl = objCall 

'не будет работать никогда
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998519
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример от производителя, никаких упоминаний ITBasicCallControl 2 нет и в помине.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
// pEvent is an IDispatch pointer for the ITCallNotificationEvent interface of the
// call object created by TAPI, and is passed into the event handler by TAPI. 

case TE_CALLNOTIFICATION:
{
    // Get the ITCallNotification interface.
    ITCallNotificationEvent * pNotify;
    hr = pEvent->QueryInterface( 
            IID_ITCallNotificationEvent, 
            (void **)&pNotify 
            );
    // If ( hr != S_OK ) process the error here. 
    
    // Get the ITCallInfo interface.
    ITCallInfo * pCallInfo;
    hr = pNotify->get_Call( &pCallInfo);
    // If ( hr != S_OK ) process the error here. 

    // Get the ITBasicCallControl interface.
    ITBasicCallControl * pBasicCall;
    hr = pCallInfo->QueryInterface(
            IID_ITBasicCallControl,
            (void**)&pBasicCall
            );
    // If ( hr != S_OK ) process the error here. 

    // Get the ITAddress interface.
    ITAddress * pAddress;
    hr = pCallInfo->get_Address( &pAddress );
    // If ( hr != S_OK ) process the error here. 

    // Create the required terminals for this call.
    {
        // See the Select a Terminal code example.
    }
    // Complete incoming call processing.
    hr = pBasicCall->Answer();
    // If ( hr != S_OK ) process the error here. 
}
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998603
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

Что только и в каких только вариантах я не пробывал и ITBasicCallControl и ITBasicCallControl2 и ITCallInfo и ITCallInfo2 и вариации с ними, все Type mismatch, делал как в примерах, делал не как в примерах, результат один.

И к сжалению ни это
Код: vbnet
1.
2.
Dim objReceivedCallControl As ITBasicCallControl
Set objReceivedCallControl = objCallNotificationEvent.Call


Ни это
Код: vbnet
1.
2.
3.
Dim objReceivedCallControl As ITBasicCallControl, objCall as Object
Set objCall = objCallNotificationEvent.Call
Set objReceivedCallControl = objCall 


не работает =(
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998651
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда сделайте из примера на с++ отдельную длл, которая снимает трубку. Когда-то давно я тоже наткнулся на проблему с tapi3, которой не возникало в аналогичном с++-коде. Возможно на эту же, какое-то дежавю прямо просыпается. Попытался переписать на api, тоже не пошло.

И не только в tapi есть такие непонятные проблемы. На тапи я в итоге забил, а эту проблему решил (не решить было нельзя) именно с помощью с++.
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #37998733
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

А по другому никак? уж больно большой это изврат писать компоненту которая отвечает на вызовы, для компоненты которая работает с телефонией, для того что бы в свою очередь это вся каша заработала на 1С... ужс.

Не покидает меня мысль что ответ том как же CallInfo превратить в BasicCallControl лежит где то на поверхности.
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #38006149
airmaxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собвственно проблема решена работой приложения не в дэбаге, если его запускать из среды, то вылетает скатина, но как только проэкт собран в релиз, какой то невероятной магией оно работает, почему так происходит это вопрос за гранью, но факт, этот код работает.
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #38198895
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
airmaxxx,
а можно через TAPI узнать во время звонка номер звонящего (наподобие команды +CLCC, во время RING)
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #38198898
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой смысл узнавать время именно через TAPI, а не простым человеческим способом через Now?
...
Рейтинг: 0 / 0
TAPI поднять/положить трубку
    #38198921
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, не время , а номер .
Надо сказать, я сначала тоже неправильно прочел вопрос ))
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TAPI поднять/положить трубку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]