DWORD dwCb = sizeof(RASCONN);
DWORD dwErr = ERROR_SUCCESS;
DWORD dwRetries = 5;
DWORD dwConnections = 0;
RASCONN* lpRasConn = NULL;
//
// Loop through in case the information from
//RAS changes between calls.
//
while (dwRetries--)
{
//
// If the memory is allocated, free it.
//
if (NULL != lpRasConn)
{
HeapFree(GetProcessHeap(), 0, lpRasConn);
lpRasConn = NULL;
}
//
// Allocate the size needed
//for the RAS structure.
//
lpRasConn = HeapAlloc(GetProcessHeap(), 0, dwCb);
if (NULL == lpRasConn)
{
dwErr = ERROR_NOT_ENOUGH_MEMORY;
break;
}
//
// Set the structure size for version
//checking purposes.
//
lpRasConn->dwSize = sizeof(RASCONN);
//
// Call the RAS API then exit the loop if we are successful or an unknown
// error occurs.
//
dwErr = RasEnumConnections(
lpRasConn,
&dwCb,
&dwConnections);
if (ERROR_BUFFER_TOO_SMALL != dwErr)
{
break;
}
}
//
// In the success case, print the names of
//the connections.
//
if (ERROR_SUCCESS == dwErr)
{
DWORD i;
printf("The following RAS connections are
currently active\n\n");
for (i = 0; i < dwConnections; i++)
{
printf("%s\n", lpRasConn->szEntryName);
}
}
else
{
printf("RasEnumConnections failed: Error %d\n", dwErr);
}
//
// Free the memory if necessary.
//
if (NULL != lpRasConn) {
HeapFree(GetProcessHeap(), 0, lpRasConn); lpRasConn = NULL; }
Как использовать RasGetProjectionInfo?
И подскажите когда соединение установится, что делать, модем сам должен замолчать или мне надо чего сделать. Помогите пожалуйста.
Цитата:
Originally posted by Shopot
Как использовать RasGetProjectionInfo? Напишите примерчик, пожалуйста, а то дает ошибку "Неправильный размер структуры".
И подскажите когда соединение установится, что делать, модем сам должен замолчать или мне надо чего сделать. Помогите пожалуйста.
Как использовать RasGetProjectionInfo? Напишите примерчик, пожалуйста, а то дает ошибку "Неправильный размер структуры".
И подскажите когда соединение установится, что делать, модем сам должен замолчать или мне надо чего сделать. Помогите пожалуйста.
Код:
Делаешь обработку сообщений модема в функции:
Код:
VOID WINAPI RasCallback(HRASCONN hrasconn, UINT unMsg,
RASCONNSTATE rascs, DWORD dwError, DWORD dwExtendedError)
{
String S = "";
if (dwError) {
// Error occurred, show the error string.
char buff[256];
fRasGetErrorString(dwError, buff, sizeof(buff));
fmMainFtp->LogEvents(buff);
String MsgError = "При подключении произошла следующая ошибка:\n"+String(buff);
if(Application->MessageBoxA(MsgError.c_str(),"Ошибка",MB_ICONQUESTION+MB_OKCANCEL)==IDOK){
fRasHangUp(hrasconn);
fmMainFtp->ttTimer->Enabled = true;
return;
}
else fmMainFtp->Close();
return;
}
switch (rascs) {
// Build a status string based on the
// status message.
case RASCS_PortOpened :
S = "Открытие порта..."; break;
case RASCS_DeviceConnected :
S = "Соединение..."; break;
case RASCS_Authenticate :
S = "Вход в сеть..."; break;
case RASCS_Authenticated :
S = "Проверка пользователя и пароля"; break;
case RASCS_Connected : {
S = "Вход в сеть";
// fmMainFtp->bbSend->Enabled = true;
fmMainFtp->ttTimerClick->Enabled = true;
break;
}
case RASCS_Disconnected :
S = "Disconnected"; break;
}
// Show the status message in the memo.
if (S != "")
fmMainFtp->LogEvents(S);
}
RASCONNSTATE rascs, DWORD dwError, DWORD dwExtendedError)
{
String S = "";
if (dwError) {
// Error occurred, show the error string.
char buff[256];
fRasGetErrorString(dwError, buff, sizeof(buff));
fmMainFtp->LogEvents(buff);
String MsgError = "При подключении произошла следующая ошибка:\n"+String(buff);
if(Application->MessageBoxA(MsgError.c_str(),"Ошибка",MB_ICONQUESTION+MB_OKCANCEL)==IDOK){
fRasHangUp(hrasconn);
fmMainFtp->ttTimer->Enabled = true;
return;
}
else fmMainFtp->Close();
return;
}
switch (rascs) {
// Build a status string based on the
// status message.
case RASCS_PortOpened :
S = "Открытие порта..."; break;
case RASCS_DeviceConnected :
S = "Соединение..."; break;
case RASCS_Authenticate :
S = "Вход в сеть..."; break;
case RASCS_Authenticated :
S = "Проверка пользователя и пароля"; break;
case RASCS_Connected : {
S = "Вход в сеть";
// fmMainFtp->bbSend->Enabled = true;
fmMainFtp->ttTimerClick->Enabled = true;
break;
}
case RASCS_Disconnected :
S = "Disconnected"; break;
}
// Show the status message in the memo.
if (S != "")
fmMainFtp->LogEvents(S);
}