Funzione RasDialDlgA (rasdlg.h)

La funzione RasDialDlg stabilisce una connessione RAS usando una voce della rubrica telefonica specificata e le credenziali dell'utente connesso. La funzione visualizza un flusso di finestre di dialogo che indicano lo stato dell'operazione di connessione.

Sintassi

BOOL RasDialDlgA(
  [in] LPSTR        lpszPhonebook,
  [in] LPSTR        lpszEntry,
  [in] LPSTR        lpszPhoneNumber,
  [in] LPRASDIALDLG lpInfo
);

Parametri

[in] lpszPhonebook

Puntatore a una stringa con terminazione null che specifica il percorso completo e il nome file di un file PBK (Phone Book). Se questo parametro è NULL, la funzione usa il file di rubrica telefonico predefinito corrente. Il file di rubrica telefonico predefinito è quello selezionato dall'utente nella finestra di proprietà Preferenze utente della finestra di dialogo Rete remota .

[in] lpszEntry

Puntatore a una stringa con terminazione null che specifica il nome della voce della rubrica telefonica da comporre.

[in] lpszPhoneNumber

Puntatore a una stringa con terminazione null che specifica un numero di telefono che esegue l'override dei numeri archiviati nella voce della rubrica telefonica. Se questo parametro è NULL, RasDialDlg usa i numeri nella voce della rubrica telefonica.

[in] lpInfo

Puntatore a una struttura RASDIALDLG che specifica parametri di input e output aggiuntivi. Il membro dwSize di questa struttura deve specificare sizeof(RASDIALDLG). Se si verifica un errore, il membro dwError restituisce un codice di errore; in caso contrario, restituisce zero.

Valore restituito

Se la funzione stabilisce una connessione RAS, il valore restituito è TRUE. In caso contrario, la funzione deve restituire FALSE.

Se si verifica un errore, RasDialDlg deve impostare il membro dwError della struttura RASDIALDLG su un valore da Routing e Codici di errore di accesso remoto o Winerror.h.

Commenti

La funzione RasDialDlg visualizza una serie di finestre di dialogo simili alle finestre di dialogo nella finestra di dialogo della finestra di dialogo Rete remota principale visualizzata quando l'utente seleziona il pulsante Dial . Usare la funzione RasDialDlg per visualizzare un'interfaccia utente standard per un'operazione di connessione senza presentare la finestra di dialogo principale della rubrica telefonica. Ad esempio, il servizio AutoDial RAS usa questa funzione per stabilire una connessione usando la voce della rubrica telefonica associata a un indirizzo remoto.

La funzione RasDialDlg visualizza le finestre di dialogo durante l'operazione di connessione per fornire commenti e suggerimenti all'utente sullo stato di avanzamento dell'operazione. Ad esempio, le finestre di dialogo potrebbero indicare quando l'operazione è chiamata, quando esegue l'autenticazione delle credenziali dell'utente nel server remoto e così via. Le finestre di dialogo forniscono anche un pulsante Annulla per l'utente per terminare l'operazione.

RasDialDlg restituisce quando viene stabilita la connessione o quando l'utente annulla l'operazione.

Il codice di esempio seguente chiama la voce nella rubrica telefonica predefinita specificata dalla variabile lpszEntry.

Nota Questo semplice esempio è destinato all'esecuzione in Windows Vista e versioni successive di Windows. Tenere presente che la chiamata a sizeof(RASENTRY) restituirà un valore diverso a seconda della versione del sistema operativo in cui viene eseguito il codice. Per assicurarsi che questa operazione venga gestita in modo appropriato.
 
#include <windows.h>
#include <stdio.h>
#include "ras.h"
#include "rasdlg.h"
#include <tchar.h>
#include "strsafe.h"

#define PHONE_NUMBER_LENGTH 7
#define DEVICE_NAME_LENGTH 5
#define DEVICE_TYPE_LENGTH 5

DWORD __cdecl wmain(){

    DWORD dwError = ERROR_SUCCESS;
    BOOL nRet = TRUE;
    LPTSTR lpszEntry = L"EntryName";
    LPTSTR lpszphonenumber = L"5555555";
    LPTSTR lpszdevicename = L"Modem";
    LPTSTR lpszdevicetype = RASDT_Modem;

    // Allocate heap memory and initialize RASENTRY structure
    LPRASENTRY lpentry = (LPRASENTRY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASENTRY));
    // Allocate heap memory and initialize RASDIALDLG structure
    LPRASDIALDLG lpInfo = (LPRASDIALDLG) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(RASDIALDLG));
    
    if (lpentry == NULL || lpInfo == NULL){
        wprintf(L"HeapAlloc failed");
        HeapFree(GetProcessHeap(), 0, lpentry);
        HeapFree(GetProcessHeap(), 0, lpInfo);
        return 0;
    }

    // The RASDIALDLG and RASENTRY dwSize members have to be initialized or the RasDialDlg()
    // RasSetEntryProperties() APIs will fail below.
    lpInfo->dwSize = sizeof(RASDIALDLG);
    lpentry->dwSize = sizeof(RASENTRY);
    lpentry->dwFramingProtocol = RASFP_Ppp;
    lpentry->dwfOptions = 0;
    lpentry->dwType = RASFP_Ppp;
    dwError |= StringCchCopyN(lpentry->szLocalPhoneNumber, RAS_MaxPhoneNumber, lpszphonenumber, PHONE_NUMBER_LENGTH);
    dwError |= StringCchCopyN(lpentry->szDeviceName, RAS_MaxDeviceName, lpszdevicename, DEVICE_NAME_LENGTH);
    dwError |= StringCchCopyN(lpentry->szDeviceType, RAS_MaxDeviceType, lpszdevicetype, DEVICE_TYPE_LENGTH);
    
    if (dwError != S_OK){
        wprintf(L"Structure initialization failed: Error = %d\n", dwError);
        HeapFree(GetProcessHeap(), 0, lpentry);
        HeapFree(GetProcessHeap(), 0, lpInfo);
        return 0;
    }

    // Validate the new entry's name
    dwError = RasValidateEntryName(NULL, lpszEntry);
    if (dwError != ERROR_SUCCESS){
        wprintf(L"RasValidateEntryName failed: Error = %d\n", dwError);
        HeapFree(GetProcessHeap(), 0, lpentry);
        HeapFree(GetProcessHeap(), 0, lpInfo);
        return 0;
    }

    // Create and set the new entry's properties
    dwError = RasSetEntryProperties(NULL, lpszEntry, lpentry, lpentry->dwSize, NULL, 0);
    if (dwError != ERROR_SUCCESS){
        wprintf(L"RasSetEntryProperties failed: Error = %d\n", dwError);
        HeapFree(GetProcessHeap(), 0, lpentry);
        HeapFree(GetProcessHeap(), 0, lpInfo);
        return 0;
    }
    
    // Connect using the new entry
    nRet = RasDialDlg(NULL, lpszEntry, NULL, lpInfo);
    if (nRet != TRUE){
        wprintf(L"RasDialDlg failed: Error = %d\n", lpInfo->dwError);
    }
    
    // Clean up: delete the new entry
    dwError = RasDeleteEntry(NULL, lpszEntry);
    if (dwError != ERROR_SUCCESS){
        wprintf(L"RasDeleteEntry failed: Error = %d\n", dwError);
    }
    
    HeapFree(GetProcessHeap(), 0, lpentry);
    HeapFree(GetProcessHeap(), 0, lpInfo);

    return 0;
}

Nota

L'intestazione rasdlg.h definisce RasDialDlg come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione rasdlg.h
Libreria Rasdlg.lib
DLL Rasdlg.dll

Vedi anche

RASDIALDLG

RasPhonebookDlg

Panoramica del servizio di accesso remoto (RAS)

Funzioni del Servizio di accesso remoto