最近在开发过程中用到RAS,需要获得连接状态,经查MSDN应该用API RasGetConnectStatus(),可是调用之后发现他的返回值始终为1,在MFC的Error.h中文件定义了:
#define ERROR_INVALID_FUNCTION      1
并且我用Depends查过RasApi32.dll确实有RasGetConnectStatusA()和RasGetConnectStatusW()函数,我通过动态加载获得这个函数调用也是得到相同的结果!
非常郁闷!那为高手遇到过这种情况?100分送上!

解决方案 »

  1.   


    我也写过一个程序,要获取连接状态,用的是下面这个,没出过错,你看一下BOOL GetConnectState()
    {
    LPRASCONN lpRasConn = NULL; 
    DWORD cbBuf = 0; 
    DWORD cConn = 0; 
    DWORD dwRet = 0; 
    HRASCONN hrasconn; 
    RASCONNSTATUS rasStatus; 
    UINT ndx; 

    cbBuf = sizeof(RASCONN);  lpRasConn = (LPRASCONN )malloc((UINT)cbBuf);

    if (lpRasConn != NULL) 

    lpRasConn->dwSize = sizeof(RASCONN); 
    dwRet = RasEnumConnections(lpRasConn, &cbBuf, &cConn);

    for (ndx=0; ndx<cConn; ndx++)  

    hrasconn = lpRasConn[ndx].hrasconn;   rasStatus.dwSize = sizeof(RASCONNSTATUS); 
    dwRet = RasGetConnectStatus(hrasconn, &rasStatus);  if (dwRet) 
    return FALSE; 
    else 

    if (rasStatus.rasconnstate == RASCS_Connected) 
    return TRUE; 
    else 
    return FALSE; 



    else 
    return FALSE; 
    }
      

  2.   

    我的开发环境是Windows 2000 Pro + VC6.0
    其他的Ras API调用没有问题!
      

  3.   

    How To Check for a Remote Access Service Connection Q153793
    from msdn:
    int APIENTRY rasnt(void)
       {
           LPRASCONN     lpRasConn = NULL;
           DWORD   cbBuf = 0;
           DWORD   cConn = 0;
           DWORD   dwRet = 0;
           HRASCONN   hrasconn;
           RASCONNSTATUS rasStatus;
           UINT    ndx;       // enumerate connections
           cbBuf = sizeof(RASCONN);
           if ( (lpRasConn = ( LPRASCONN ) malloc((UINT)cbBuf)) != NULL)
           {
               lpRasConn->dwSize = sizeof( RASCONN );
               dwRet = RasEnumConnections( lpRasConn, &cbBuf, &cConn );
          for (ndx = 0; ndx < cConn; ndx++)
          {
              // get to HRASCONN
              hrasconn = lpRasConn[ndx].hrasconn;          // get connection status
              rasStatus.dwSize = sizeof(RASCONNSTATUS);
              dwRet = RasGetConnectStatus( hrasconn, &rasStatus );
              if ( dwRet ) return 0;
              else
              {
             if (rasStatus.rasconnstate == RASCS_Connected) return 1;
             else return 0;
              }
          }
           }       return 0;
       }
      

  4.   

    我主要是在挂断一个Ras连接的过程种来检查Ras状态,代码如下:
    BOOL HangUp()
    {
    BOOL result;
    if (m_hConnection != NULL) 

    result = !RasHangUp(m_hConnection); 

    while(RasGetConnectStatus(m_hConnection, &rstatus) != ERROR_INVALID_HANDLE)

    ::Sleep(0);
    }

      
    if (result)
            m_hConnection = NULL;
    }

    return result;
    }
      

  5.   

    找到错误了!
    RASCONNSTATUS rasStatus;
    rasStatus没有设置dwSize,导致的上面的错误!
    感谢各位的支持,上面的100分大家分了吧!呵呵