Condividi tramite


Funzione RasDialDlgA (rasdlg.h)

La funzione RasDialDlg stabilisce una connessione RAS usando una voce di 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 di rubrica telefonica (PBK). Se questo parametro è NULL, la funzione usa il file predefinito corrente della rubrica telefonica. Il file predefinito della rubrica telefonica è quello selezionato dall'utente nella finestra di dialogo 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 Routing e codici di errore di accesso remoto o Winerror.h.

Osservazioni

La funzione RasDialDlg visualizza una serie di finestre di dialogo simili alle finestre di dialogo principali finestra di dialogo connessione remota visualizzata quando l'utente seleziona il pulsante dial . Utilizzare 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 di Annulla per consentire all'utente di terminare l'operazione.

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

Il codice di esempio seguente compone 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. Eseguire le operazioni necessarie per assicurarsi che venga gestito 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 del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows 2000 Professional [solo app desktop]
server minimo supportato Windows 2000 Server [solo app desktop]
piattaforma di destinazione Finestre
intestazione rasdlg.h
libreria Rasdlg.lib
dll Rasdlg.dll

Vedere anche

RASDIALDLG

RasPhonebookDlg

Panoramica servizio di accesso remoto (RAS)

funzioni del servizio accesso remoto