RasDial
#include <ras.h>
#include <raserror.h>
...........
RASDIALPARAMS rdParams; // Параметры для RAS
HRASCONN hRasConn; // Информация о соединении
..............
//----------------------------------------------------------------------
// Удаленный доступ
bool TForm1::DialUp(TObject *Sender)
{
rdParams.dwSize = sizeof(RASDIALPARAMS);
rdParams.szEntryName[0] = '\0';
lstrcpy( rdParams.szPhoneNumber, Phone.c_str());
rdParams.szCallbackNumber[0] = '\0';
lstrcpy( rdParams.szUserName, LoginI.c_str());
lstrcpy( rdParams.szPassword, Password.c_str());
rdParams.szDomain[0] = '\0';
hRasConn = NULL;
DWORD dwRet = RasDial( NULL, NULL, &rdParams, 0L, NULL, &hRasConn );
if ( dwRet == 0 )
return true;
char szBuf[256];
if ( RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 ) != 0 )
wsprintf( (LPSTR)szBuf, "Undefined RAS Dial Error (%ld).", dwRet );
RasHangUp( hRasConn );
MessageDlg((LPSTR)szBuf, mtError, TMsgDlgButtons() << mbOK, 0);
return false;
}
//-------------------------------------------.................
// набрать номер
if (!DialUp(this)) {
ConnectBar->SimpleText = "Соединение НЕ установлено";
return;
}
// Проверить состояние
RASCONNSTATUS rs;
rs.dwSize = sizeof(RASCONNSTATUS);
RasGetConnectStatus(hRasConn, &rs);
if (rs.rasconnstate == RASCS_Connected)
ConnectBar->SimpleText = "Соединение установлено";
...............
// Разорвать связь
RasHangUp(hRasConn);
..............
И все компилится но RasDial возвращает ошибку 610 - неверно задан буфер. Подскажите вчем дело и как исправить а то я совсем ничего не понимаю... :D
char szBuff[256];
а надо
char *szBuff[256];
так как тебе в функцию надо LPSTR(Long Pointer to String) передать
Скорее всего дело в том что:
char szBuff[256];
а надо
char *szBuff[256];
так как тебе в функцию надо LPSTR(Long Pointer to String) передать
Нет... к сожалению ошибка выпадает до определения
char *szBuff[256]. (даже так выдает ошибку) :)
ошибка 610 - как результат выполнения функции RasDial:
DWORD dwRet = RasDial( NULL, NULL, &rdParams, 0L, NULL, &hRasConn );
просто дальше char *szBuff[256] это текстовое определение ошибки... :)
Вот так будет правильно?
rdParams.szEntryName[0] = '\0';
lstrcpy( rdParams.szPhoneNumber, "9955555");
rdParams.szCallbackNumber[0] = '\0';
lstrcpy( rdParams.szUserName, "guest");
lstrcpy( rdParams.szPassword, "mtu");
rdParams.szDomain[0] = '\0';
можетгденить тут ошибка?
:???:
Нет... к сожалению ошибка выпадает до определения
char *szBuff[256]. (даже так выдает ошибку) :)
ошибка 610 - как результат выполнения функции RasDial:
DWORD dwRet = RasDial( NULL, NULL, &rdParams, 0L, NULL, &hRasConn );
просто дальше char *szBuff[256] это текстовое определение ошибки... :)
Вот так будет правильно?
rdParams.szEntryName[0] = '\0';
lstrcpy( rdParams.szPhoneNumber, "9955555");
rdParams.szCallbackNumber[0] = '\0';
lstrcpy( rdParams.szUserName, "guest");
lstrcpy( rdParams.szPassword, "mtu");
rdParams.szDomain[0] = '\0';
можетгденить тут ошибка?
:???:
Один из способов обхода (не помню уж где нашел):
//-----------------------------------------------
#define OLDWINVER WINVER
#undef WINVER
#define WINVER 0x400
//"насильно" подсовываем номер версии
#include <ras.h>
#include <raserror.h>
// include any other RAS headers you need
#undef WINVER
#define WINVER OLDWINVER
#undef OLDWINVER
//-------------------------------------------------
PS Sorry for prev-s message ;-(
Конечно придется на поток сажать, а то тормозит всю прогу но зато работает!
Адрес-то вообще ping-уется ?
Думается, RAS тут не при чем.
Адрес-то вообще ping-уется ?
Как я могу себя пропинговать то?? :(
может не все настройки были указаны?
rdParams.szEntryName[0] = '\0';
rdParams.szDomain[0] = '\0';
сюда точно эти значения должны быть вставлены? :-?
rdParams.szDomain[0] = '\0';
сюда точно эти значения должны быть вставлены? :-? [/QUOTE]
szEntryName - в твоем случае берется по умолчанию.
я у себя перебираю все зарегестрированные (так что разницы быть не должно)
посмотри на мою библтотечную функцию - м.б. поможет...
//---------------------------------------------------------------------------
int __fastcall ConnectToName(AnsiString User,AnsiString Pswrd,AnsiString cnct)
{
RASDIALPARAMS rdp;
setmem(&rdp.dwSize,sizeof(RASDIALPARAMS),0);
rdp.dwSize=sizeof(RASDIALPARAMS);
strcpy( rdp.szEntryName, cnct .c_str());//,"Tюхфшэхэшх");
strcpy( rdp.szUserName, User .c_str());
strcpy( rdp.szPassword, Pswrd.c_str());
////
HRASCONN hRas=NULL;
DWORD er=RasDial(
NULL ,// LPRASDIALEXTENSIONS lpRasDialExtensions, // pointer to function extensions data
NULL ,// LPTSTR lpszPhonebook, // pointer to full path and filename of phone-book file
&rdp ,// LPRASDIALPARAMS lpRasDialParams, // pointer to calling parameters data
NULL ,// DWORD dwNotifierType, // specifies type of RasDial event handler
NULL ,// LPVOID lpvNotifier, // specifies a handler for RasDial events
// Zaglushka ,// LPVOID lpvNotifier, // specifies a handler for RasDial events
&hRas // LPHRASCONN lphRasConn // pointer to variable to receive connection handle
);
if(er){ if(hRas)
RasHangUp(hRas);
/*
An application should not call RasHangUp and then immediately exit.
The connection state machine needs time to properly terminate. If the system
prematurely terminates the state machine, the state machine may fail
to properly close a port, leaving the port in an inconsistent state.
A simple way to avoid this problem is to call Sleep(3000) after returning
from RasHangUp; after that pause, the application can exit. A more
responsive way to avoid the problem is, after returning from RasHangUp,
to call RasGetConnectStatus(hrasconn) and Sleep(0) in a loop until
RasGetConnectStatus returns ERROR_INVALID_HANDLE.
*/ RASCONNSTATUS rStat;
rStat.dwSize=sizeof(rStat);
while( RasGetConnectStatus(hRas, &rStat)!=ERROR_INVALID_HANDLE)
Sleep(0);
}
return er;
}
под 2000, Me, XP пашет...
Честно говорю - не ковырял я твоего примера (вообще удивился, что тема все жива). Скорее всего, в тот самый блок обхода надо приинклюдить еще файл.
К примеру, если из упомянутого места:
#include <ras.h>
#include <raserror.h>
удалить <raserror.h>, то функция сообщения об ошибке будет отрыгаться тем же самым сообщением.
Так что - смотри в каком файле у тебя описана функция и вставляй его за #include <raserror.h>.
Думаю - заработает