最近在开发过程中用到RAS,需要获得连接状态,经查MSDN应该用API RasGetConnectStatus(),可是调用之后发现他的返回值始终为1,在MFC的Error.h中文件定义了:
#define ERROR_INVALID_FUNCTION 1
并且我用Depends查过RasApi32.dll确实有RasGetConnectStatusA()和RasGetConnectStatusW()函数,我通过动态加载获得这个函数调用也是得到相同的结果!
非常郁闷!那为高手遇到过这种情况?100分送上!
#define ERROR_INVALID_FUNCTION 1
并且我用Depends查过RasApi32.dll确实有RasGetConnectStatusA()和RasGetConnectStatusW()函数,我通过动态加载获得这个函数调用也是得到相同的结果!
非常郁闷!那为高手遇到过这种情况?100分送上!
解决方案 »
- WSAAsyncSelect多线程的问题?
- HTML中如何提取某类元素标记的所有元素?
- 关于VC图像处理的一些疑问
- VC运行不了怎么回事?
- 还有人在用SkinMagic吗?这个东东外观靓丽,可是用了才知道,根本不能用,他提供的免费皮肤源代码里,居然有内存泄露!!!
- 如何通过ID号得到与其相对应的句柄?可使用什么函数吗?
- 我是新手,请问:在mfc中如何加入server数据库呀?
- sdk,createwindow()???
- 哪位高手会使用 Microsoft mulitmedia 控件,来播放带音频的 avi 文件?
- 请问怎样在刷新时间的同时部刷新窗口中的其他视图
- 关于WIN API滚动条的问题
- 寻找下载文件、复制文件、删除文件等的动画!
我也写过一个程序,要获取连接状态,用的是下面这个,没出过错,你看一下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;
}
其他的Ras API调用没有问题!
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;
}
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;
}
RASCONNSTATUS rasStatus;
rasStatus没有设置dwSize,导致的上面的错误!
感谢各位的支持,上面的100分大家分了吧!呵呵