Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация TAPI, открытие линии. 
:(
    Опции темы
AndreySol
Дата 16.2.2007, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Нашел пример инициализации TAPI, открытия линии.
Код

HLINEAPP hLineApp = NULL;
HLINE hLine = NULL;
HANDLE hTapiEvent = NULL;
DWORD dwNumDevs = 0;
DWORD dwTapiMediaMode = LINEMEDIAMODE_INTERACTIVEVOICE;
DWORD dwTapiDeviceID = -1;

DWORD dwAPIVersion = TAPI_CURRENT_VERSION;

LINEINITIALIZEEXPARAMS lpLineInitExParam = {0};
lpLineInitExParam.dwTotalSize = sizeof(LINEINITIALIZEEXPARAMS);
lpLineInitExParam.dwOptions = LINEINITIALIZEEXOPTION_USEHIDDENWINDOW;

lResult = lineInitializeEx(&hLineApp, NULL, (LINECALLBACK)LineCallbackFunc, NULL, &dwNumDevs, 

&dwAPIVersion, &lpLineInitExParam);
if(lResult != 0)
    return lResult;
else
{    // Event handle
    hTapiEvent = lpLineInitExParam.Handles.hEvent;

    for(unsigned long l = 0; l < dwNumDevs; l++)
    {
        LINEEXTENSIONID LineExtensionID = {0};
        DWORD dwNegotiatedTapiVersion;

        // Skip devices incompatible to our version
        if((lResult = lineNegotiateAPIVersion(hLineApp, l, dwAPIVersion, dwAPIVersion, 

&dwNegotiatedTapiVersion, &LineExtensionID)) < 0)
            continue;

        lpLineCaps.dwTotalSize = sizeof(LINEDEVCAPS);
        lResult = lineGetDevCaps(hLineApp, l, dwNegotiatedTapiVersion, 0, &lpLineCaps);
        if(lResult != 0)
            return lResult;
        else
        {
            DWORD dwNeeded = lpLineCaps.dwNeededSize;
            ZeroMemory(&lpLineCaps, sizeof(lpLineCaps));
            lpLineCaps.dwTotalSize = dwNeeded;
            lResult = lineGetDevCaps(hLineApp, l, dwNegotiatedTapiVersion, 0, 

&lpLineCaps);
            if(lResult == 0)
            {
                if(lpLineCaps.dwMediaModes & dwTapiMediaMode) 
                {
                    dwTapiDeviceID = l;
                    break;
                }
            }
        }
    }

    lResult = lineOpen(hLineApp, dwTapiDeviceID, &hLine, dwAPIVersion, NULL, (DWORD_PTR) 

LineCallbackFunc, LINECALLPRIVILEGE_NONE, LINEMEDIAMODE_INTERACTIVEVOICE, NULL);
    if(lResult < 0)
    {
        MessageBox("Error lineOpen","",0);

        return lResult;
    }
}

Куча непоняток:
1. Если код оставить в приведенном выше виде, то определяется одна линия и lineOpen срабатывает без ошибки.
Если объявление переменной DWORD dwAPIVersion вынести в хедер, а в реализации оставить
Код

dwAPIVersion = TAPI_CURRENT_VERSION;

то ни одной линии не определяется и lineOpen дает ошибку.
В чем дело ?

2. Когда линия определяется, то ее название, которое можно получить из LINEDEVCAPS - "IPCONF LINE". Если для этой линии сделать lineMakeCall, то ошибки нет но модем молчит намертво.

3. Заставить модем набрать номер получается только если вместо dwTapiDeviceID в lineOpen 
подставить 0. Этому идентификатору соответствует линия "Минипорт WAN(L2TP)", но она почему-то не определяется в этом месте
Код

if(lpLineCaps.dwMediaModes & dwTapiMediaMode)
{
}

Помогите !!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0568 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.