САМЫЙ ПРОСТОЙ dialer
Звоним:
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);
Вот, собственно, и все!!!
1) rasParam.szEntryName[0] = '\0';
2) rasParam.szCallbackNumber[0] = '\0';
3) rasParam.szDomain[0] = '\0';
Если их оставить пустыми, то будет ли работать?
Где регулировать громкость динамика?
Объясните, пожалуйста, зачем нужны следующие строки:
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.
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);
.....................
Посмотри в MSDN описание структуры RASDIALPARAMS
1) Там смотрел. И насколько понял, ничего плохого в этом нет.
2) Кстати, сразу насчет MSDN: что есть TAPI (The Telephony Application Programming Interface) и нельзя ли его юзать вместо RasDial?
3) Sorry, как обнулить всю структуру? Не тупым перебором ведь struct.field1=""; struct.field2=""; struct.field3=""; и т. д.?
4) Чем хороша lstrcpy? Я использую strncpy.
Посмотри мой исходник, что-то он работает криво...
И как уменшить громкость модема в данном соединении? В настройках модема и других соединениях громкость минимальна, а в этом нет.
3) Sorry, как обнулить всю структуру? Не тупым перебором ведь struct.field1=""; struct.field2=""; struct.field3=""; и т. д.?
Можно обнулить структуру при её инициализации (я уже это показывал на пост выше):
RASDIALPARAMS rasParam = {0};
Моно обнулить и так:
memset(rasParam, 0, sizeof RASDIALPARAMS);
или так
ZeroMemory(rasParam, sizeof RASDIALPARAMS);
что, в принципе, однотипно.
4) Чем хороша lstrcpy? Я использую strncpy.
Нельзя так ставить вопросы. :D
Я рекомендую использовать функции копирования с явным указанием размера. В этом случае strncpy предпочтительнее, чем lstrcpy. Но есть еще lstrcpyn, которая также запрашивает конкретный размер, но еще и учитывает завершающий ноль. Кроме того, эта функция работает с TCHAR (т.е. её целесообразнее сравнивать с _tcsncpy).
То есть?
И как уменшить громкость модема в данном соединении? В настройках модема и других соединениях громкость минимальна, а в этом нет.