Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

САМЫЙ ПРОСТОЙ dialer

389
15 февраля 2004 года
Dmitri
69 / / 20.08.2000
Подскажите, пожалуйста, как написать САМЫЙ ПРОСТОЙ dialer на C++ с VCL или на чистом WinAPI? Мне нужны только функции дозвона до провайдера и разрыва связи. Где можно почитать или почитать пример?
4.9K
16 февраля 2004 года
FLUID
8 / / 05.11.2003
:!!!: Вобщем так:(все приблизительно...за ошибки сорри)...

Звоним:
RASDIALPARAMS rasParam;
rasParam.dwSize = sizeof(RASDIALPARAMS);
rasParam.szEntryName[0] = '\0';
lstrcpy(rasParam.szPhoneNumber,Edit1->Text.c_str());
lstrcpy(rasParam.szUserName,Edit2->Text.c_str());
lstrcpy(rasParam.szPassword,Edit3->Text.c_str());
rasParam.szCallbackNumber[0] = '\0';
rasParam.szDomain[0] = '\0';
HRASCONN hRas = NULL;
DWORD dwRetCode = RasDial( NULL,NULL,&rasParam,0L,NULL,&hRas);
if(dwRetCode != 0)
{
char szBuff[256];
if(RasGetErrorString((UINT)dwRetCode,(LPSTR)szBuff,256) != 0)
MessageBox(NULL,"Unindefined error","RAS Error",MB_OK|MB_ICONERROR);
MessageBox(NULL,szBuff,"RAS Error",MB_OK|MB_ICONERROR);
}

А разрываем с пом. функции RasHungUp(hRas);

Вот, собственно, и все!!!
389
08 июля 2004 года
Dmitri
69 / / 20.08.2000
Объясните, пожалуйста, зачем нужны следующие строки:

1) rasParam.szEntryName[0] = '\0';

2) rasParam.szCallbackNumber[0] = '\0';

3) rasParam.szDomain[0] = '\0';

Если их оставить пустыми, то будет ли работать?

Где регулировать громкость динамика?
3
08 июля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Dmitri
Объясните, пожалуйста, зачем нужны следующие строки:

1) rasParam.szEntryName[0] = '\0';

2) rasParam.szCallbackNumber[0] = '\0';

3) rasParam.szDomain[0] = '\0';

Если их оставить пустыми, то будет ли работать?



Посмотри в MSDN описание структуры RASDIALPARAMS.

Цитата:

szCallbackNumber
Specifies a string that contains a callback phone number. An empty string ("") indicates that callback should not be used.


и т.д.

А вообще-то, неиспользуемые поля структур рекомендуется обнулять, поэтому неплохо бы обнулить сначала всю структуру, а потом заполнить нужные поля.

Кроме того, использование в данном примере lstrcpy() может привести к критическим ошибкам типа BuferOverwlow. Поэтому, лучше использовать lstrcpyn.

 
Код:
RASDIALPARAMS rasParam = {0};
rasParam.dwSize = sizeof RASDIALPARAMS;
lstrcpyn(rasParam.szPhoneNumber,Edit1->Text.c_str(), sizeof rasParam.szPhoneNumber);
lstrcpyn(rasParam.szUserName,Edit2->Text.c_str(), sizeof rasParam.szUserName);
lstrcpyn(rasParam.szPassword,Edit3->Text.c_str(), sizeof rasParam.szPassword);
HRASCONN hRas = NULL;
DWORD dwRetCode = RasDial( NULL,NULL,&rasParam,0L,NULL,&hRas);
.....................
389
08 июля 2004 года
Dmitri
69 / / 20.08.2000
Цитата:

Посмотри в MSDN описание структуры RASDIALPARAMS



1) Там смотрел. И насколько понял, ничего плохого в этом нет.

2) Кстати, сразу насчет MSDN: что есть TAPI (The Telephony Application Programming Interface) и нельзя ли его юзать вместо RasDial?

3) Sorry, как обнулить всю структуру? Не тупым перебором ведь struct.field1=""; struct.field2=""; struct.field3=""; и т. д.?

4) Чем хороша lstrcpy? Я использую strncpy.

Посмотри мой исходник, что-то он работает криво...

И как уменшить громкость модема в данном соединении? В настройках модема и других соединениях громкость минимальна, а в этом нет.

3
08 июля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Dmitri

3) Sorry, как обнулить всю структуру? Не тупым перебором ведь struct.field1=""; struct.field2=""; struct.field3=""; и т. д.?


Можно обнулить структуру при её инициализации (я уже это показывал на пост выше):
RASDIALPARAMS rasParam = {0};

Моно обнулить и так:
memset(rasParam, 0, sizeof RASDIALPARAMS);
или так
ZeroMemory(rasParam, sizeof RASDIALPARAMS);
что, в принципе, однотипно.

Цитата:
Originally posted by Dmitri

4) Чем хороша lstrcpy? Я использую strncpy.


Нельзя так ставить вопросы. :D
Я рекомендую использовать функции копирования с явным указанием размера. В этом случае strncpy предпочтительнее, чем lstrcpy. Но есть еще lstrcpyn, которая также запрашивает конкретный размер, но еще и учитывает завершающий ноль. Кроме того, эта функция работает с TCHAR (т.е. её целесообразнее сравнивать с _tcsncpy).

389
09 июля 2004 года
Dmitri
69 / / 20.08.2000
Цитата:
учитывает завершающий ноль



То есть?

И как уменшить громкость модема в данном соединении? В настройках модема и других соединениях громкость минимальна, а в этом нет.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог