上面的代码是从我在一份别人的源码中获得的, 
但不知对你有没有用,_WININET_DATA _WinInetData;BOOL CXXXX::ConnectToInternet()
{
  if (_WinInetData.m_lpfnInternetGetConnectedState && _WinInetData.m_lpfnInternetAttemptConnect)
  {
    // Check to see if an internet connection exists already.
    // bInternet = TRUE  internet connection exists.
    // bInternet = FALSE internet connection does not exist
    DWORD dwFlags;
    BOOL bInternet = _WinInetData.m_lpfnInternetGetConnectedState(&dwFlags, 0);
    if (!bInternet)
    {
      // Attempt to establish internet connection, probably
      // using Dial-up connection.
      // static method CloseInternetConnection() Closes dial-up connection
      // if any.
      DWORD dwResult = _WinInetData.m_lpfnInternetAttemptConnect(0);
      if (dwResult != ERROR_SUCCESS)
      {
        SetLastError(dwResult);
        return FALSE;
      }
    }
    return TRUE;
  }
  else
  {
    //Wininet is not available. Do what would happen if the dll
    //was present but the function call failed
    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);  
    return FALSE;
  }
}
BOOL CXXXX::CloseInternetConnection()
{
  if (_WinInetData.m_lpfnInternetAutoDialHangup)
  {
    // Make sure any connection through a modem is 'closed'.
    return _WinInetData.m_lpfnInternetAutoDialHangup(0);
  }
  else
  {
    //Wininet is not available. Do what would happen if the dll
    //was present but the function call failed
    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);  
    return FALSE;
  }
}

解决方案 »

  1.   

    class _WININET_DATA
    {
    public:
    //Constructors /Destructors
      _WININET_DATA();
      ~_WININET_DATA();//typedefs of the function pointers
      typedef BOOL (WINAPI INTERNETGETCONNECTEDSTATE)(LPDWORD, DWORD);
      typedef INTERNETGETCONNECTEDSTATE* LPINTERNETGETCONNECTEDSTATE;
      typedef BOOL (WINAPI INTERNETAUTODIALHANGUP)(DWORD);
      typedef INTERNETAUTODIALHANGUP* LPINTERNETAUTODIALHANGUP;
      typedef BOOL (WINAPI INTERNETATTEMPCONNECT)(DWORD);
      typedef INTERNETATTEMPCONNECT* LPINTERNETATTEMPCONNECT;
    //Member variables
      HINSTANCE                   m_hWininet;  //Instance handle of the "Wininet.dll" which houses the 2 functions we want
      LPINTERNETGETCONNECTEDSTATE m_lpfnInternetGetConnectedState;
      LPINTERNETAUTODIALHANGUP    m_lpfnInternetAutoDialHangup;
      LPINTERNETATTEMPCONNECT     m_lpfnInternetAttemptConnect;
    };_WININET_DATA::_WININET_DATA()
    {
      m_hWininet = LoadLibrary(_T("WININET.DLL"));
      if (m_hWininet)
      {
        m_lpfnInternetGetConnectedState = (LPINTERNETGETCONNECTEDSTATE) GetProcAddress(m_hWininet, "InternetGetConnectedState");
        m_lpfnInternetAutoDialHangup = (LPINTERNETAUTODIALHANGUP) GetProcAddress(m_hWininet, "InternetAutodialHangup");
        m_lpfnInternetAttemptConnect = (LPINTERNETATTEMPCONNECT) GetProcAddress(m_hWininet, "InternetAttemptConnect");
      }
    }
      

  2.   

    最后在析构时, FreeLibray
    _WININET_DATA::~_WININET_DATA()
    {
      if (m_hWininet)
      {
        FreeLibrary(m_hWininet);
        m_hWininet = NULL;
      }
    }
      

  3.   

    to alphagx(alpha) 
      谢谢!这些代码好象跟IE连接到互联网有关,不能真正地建立连接!
      

  4.   

    查MSDN,TAPI,保证让你满意!
      

  5.   

    我只是想调系统的方法建一个拨号连接,应该不会用TAPI吧
      

  6.   

    感谢您使用微软的产品。如果想通过系统的简单方法进行一个拨号连接,首先手动创建一个到ISP的拨号连接。
    然后调用系统wininet.dll中的InternetAutodial函数就可以了(假设您的连接为默认连接)。请注意在VC中加入wininet.h头文件,项目中加入wininet.lib文件。关于拨号连接的详细信息,请参见Microsoft Win32 Internet Function introduction.
    您可以在msdn中找到与InternetDial相关的一系列函数。======================
    - 微软全球技术中心VC技术支持
    本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
    ======================
      

  7.   

    to acptvc(微软全球技术中心 VC技术支持) 
       谢谢!! "首先手动创建一个到ISP的拨号连接。",我的本意是用程序来自动建立,并且不一定非得连接到ISP
      

  8.   

    拨号文件(.dun)都是文本的啊!而且是INI格式,可以用WritePrivateProfileString之类函数自己写一个。
      

  9.   

    to Lighter(火机)
      拨号文件(.dun)中好象与我建立的拨号连接没有关系,请教!
      

  10.   

    这好象需要RasDial等函数来做吧.很麻烦,以前曾经做过,很长时间没有接触了.不过www.codeguru.com应该有类似的例子,你可以到那里找找看.
      

  11.   

    我也想知道这个问题如何解决,如果谁知道请e_mail一份到[email protected]
      

  12.   

    http://www.codeguru.com/internet/rasabslay.shtml
    Programmatically Create Dialup Connection Objects
      

  13.   

    Programmatically Create Dialup Connection Objects 
    http://www.codeguru.com/internet/rasabslay.shtml
      

  14.   

    http://www.csdn.net/expert/topic/357/357042.xml
      

  15.   

    bool  CTstDlg::DialUp() 
    {
        RASDIALPARAMS rdParams;
        rdParams.dwSize = sizeof(RASDIALPARAMS);
    rdParams.szEntryName[0] = '\0';
    lstrcpy( rdParams.szPhoneNumber, m_strPhoneNumber );
    rdParams.szCallbackNumber[0] = '\0';
    lstrcpy( rdParams.szUserName, m_strUserName );
    lstrcpy( rdParams.szPassword, m_strPassword );
    rdParams.szDomain[0] = '\0'; HRASCONN hRasConn = NULL;
        DWORD dwRet = RasDial( NULL, NULL, &rdParams, 0L, NULL, &hRasConn );
        if ( dwRet == 0 )  return true;
        char  szBuf[256];
    if ( RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 ) != 0 )
    wsprintf( (LPSTR)szBuf, "Undefined RAS Dial Error (%ld).", dwRet );
    RasHangUp( hRasConn );
    MessageBox( (LPSTR)szBuf, "Error", MB_OK | MB_ICONSTOP );
    return false;
    }