Поделиться через


Функция RasDialDlgA (rasdlg.h)

Функция RasDialDlg устанавливает подключение RAS с помощью указанной записи телефонной книги и учетных данных пользователя, вошедшего в систему. Функция отображает поток диалоговых окон, указывающих состояние операции подключения.

Синтаксис

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

Параметры

[in] lpszPhonebook

Указатель на строку, завершающуюся значением NULL, которая указывает полный путь и имя файла телефонной книги (PBK). Если этот параметр NULL, функция использует текущий файл телефонной книги по умолчанию. Файл телефонной книги по умолчанию — это файл, выбранный пользователем в разделе настройки пользователя свойств диалогового окна "Подключение к сети".

[in] lpszEntry

Указатель на строку, завершающую значение NULL, которая указывает имя записи телефонной книги для набора.

[in] lpszPhoneNumber

Указатель на строку, завершающую значение NULL, которая указывает номер телефона, который переопределяет номера, хранящиеся в записи телефонной книги. Если этот параметр NULL, RasDialDlg использует номера в записи телефонной книги.

[in] lpInfo

Указатель на структуру RASDIALDLG, которая задает дополнительные входные и выходные параметры. Элемент dwSize этой структуры должен указывать sizeof(RASDIALDLG). При возникновении ошибки элемент dwError возвращает код ошибки; в противном случае возвращается ноль.

Возвращаемое значение

Если функция устанавливает подключение RAS, возвращаемое значение TRUE. В противном случае функция должна возвращать FALSE.

Если возникает ошибка, RasDialDlg должен задать dwError член структуры RASDIALDLG значением из кодов ошибок маршрутизации и удаленного доступа или Winerror.h.

Замечания

Функция RasDialDlg отображает ряд диалоговых окон, аналогичных диалоговым окнам, в которых отображается основное диалоговое окно "Сеть телефонного подключения", когда пользователь выбирает кнопку dial. Используйте функцию RasDialDlg, чтобы отобразить стандартный пользовательский интерфейс для операции подключения без представления диалогового окна основной телефонной книги. Например, служба autoDial RAS использует эту функцию для установления подключения с помощью записи телефонной книги, связанной с удаленным адресом.

Функция RasDialDlg отображает диалоговые окна во время операции подключения, чтобы предоставить пользователю отзыв о ходе выполнения операции. Например, диалоговые окна могут указывать, когда операция вызывается, при проверке подлинности учетных данных пользователя на удаленном сервере и т. д. Диалоговые окна также предоставляют кнопку отмены отмены для пользователя, чтобы завершить операцию.

RasDialDlg возвращается при установке подключения или при отмене операции пользователем.

Следующий пример кода вызывает запись в телефонной книге по умолчанию, указанной переменной lpszEntry.

Примечание Этот простой пример предназначен для запуска в Windows Vista и более поздних версиях Windows. Обратите внимание, что вызов sizeof(RASENTRY) возвращает другое значение в зависимости от того, какая версия операционной системы выполняется. Выполните действия, чтобы убедиться, что это правильно обрабатывается.
 
#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;
}

Заметка

Заголовок rasdlg.h определяет RasDialDlg как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка rasdlg.h
библиотеки Rasdlg.lib
DLL Rasdlg.dll

См. также

RASDIALDLG

RasPhonebookDlg

Обзор службы удаленного доступа (RAS)

функции службы удаленного доступа