根据msdn里面说的
若 RasDial 中 RASDIALPARAMS 中 szEntryName 若为“”,则会用第一个modem来拨号
“ ...An empty string ("") specifies a simple modem connection on the first available modem port, in which case a nonempty szPhoneNumber must be provided. ”如果,我现在想从RasEnumDevices 得到的modem里面选择一个来进行拨号,应该如何做?希望在程序里面选择拨号设备,不是建立多个phone-book entry 来选择谢谢!

解决方案 »

  1.   

    使用下列函数获得本机上安装的所有MODEM
    CString strModemNameArray[10];
    BOOL GetModemName(CString* strModemNameArray)
    {
    DWORD dwSize = 0;
    DWORD dwNumOfDevices = 0;
    DWORD dwRV = RasEnumDevices(NULL, &dwSize, &dwNumOfDevices); RASDEVINFO *lpRdi = new RASDEVINFO[dwNumOfDevices];
    lpRdi->dwSize = sizeof(*lpRdi);
    dwRV = RasEnumDevices(lpRdi, &dwSize, &dwNumOfDevices);
    if(dwRV != 0)
    {
    delete []lpRdi;
    return FALSE;
    } CString strType;
    int j = 0;
    for(int i = 0; i < (int)dwNumOfDevices; i++)
    {
    strType = lpRdi[i].szDeviceType;
    if(strType.CompareNoCase("modem") == 0)  // = "RASDT_Modem";
    {
    strModemNameArray[j] = lpRdi[i].szDeviceName;
    j++;
    }
    }
    delete []lpRdi;
    return TRUE;
    }DWORD CreateNewEntry(CString strEntry, 
    CString strDeviceType, 
    CString strDeviceName, 
    DWORD dwfNetProtocols, DWORD dwFrameProtocal, 
    CString strLocalPhone,
    CString strPhoneBook /*=NULL*/)
    {
    LPTSTR lpszEntry = strEntry.GetBuffer(1);
    strEntry.ReleaseBuffer();
    LPTSTR lpszPhoneBook = strPhoneBook.GetBuffer(1);
    if(strPhoneBook == _T(""))
    lpszPhoneBook = NULL;
    strPhoneBook.ReleaseBuffer();
    if(RasValidateEntryName(lpszPhoneBook, lpszEntry) !=       ERROR_ALREADY_EXISTS/*ERROR_INVALID_NAME*/)
    {
    RASENTRY rasEntry;
    ::ZeroMemory(&rasEntry, sizeof(rasEntry));
    rasEntry.dwSize = sizeof(rasEntry);
    strcpy(rasEntry.szLocalPhoneNumber, strLocalPhone);
    rasEntry.dwfNetProtocols = dwfNetProtocols;   
    rasEntry.dwFramingProtocol = dwFrameProtocal; 
    strcpy(rasEntry.szAutodialDll, "");
    strcpy(rasEntry.szDeviceType, strDeviceType); 
    strcpy(rasEntry.szDeviceName, strModemNameArray[0]);
                      strModemNameArray为你需要使用拨号的MODEM
    DWORD dwRV = RasSetEntryProperties(lpszPhoneBook, (char*)lpszEntry, &rasEntry, 
    sizeof(rasEntry), NULL, 0);
    return dwRV;
    }
    return ERROR_ALREADY_EXISTS;
    }
    DWORD RasDialSyn(“我的连接”,56321410, User, Password,)
    {
    LPTSTR lpszPhoneBook = NULL;
    if(strPhoneBook != _T(""))
    {
    lpszPhoneBook = strPhoneBook.GetBuffer(1);
    strPhoneBook.ReleaseBuffer();
    }
    RASDIALPARAMS dialParams;
        ::ZeroMemory(&dialParams, sizeof(dialParams) );
        dialParams.dwSize = sizeof(dialParams);
    strcpy(dialParams.szEntryName, strEntry);
    strcpy(dialParams.szPhoneNumber, strPhoneNumber);
    strcpy(dialParams.szUserName, strUserName);
    strcpy(dialParams.szPassword, strPassword);
    strcpy(dialParams.szDomain, strDomain); m_ConnectionHandle = NULL;
    DWORD dwError = RasDial(NULL, lpszPhoneBook, &dialParams, NULL, 
    NULL, &m_ConnectionHandle); 
    return dwError;
    }