15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


WNetGetConnection fails in release mode

Veeraraghavan -- veera@hiso.honeywell.soft.net
Thursday, June 06, 1996

Hi Everybody,

	Environment : VC++ 1.52 , Windows 3.11

	I have an application which needs to find out whether the user is 
connected to the server through redirected local network device(for eg 
f:). I am calling WNetGetConnection for each drive letter and checking 
the second parameter(which is the resourcename) to see whether the user 
is connected to the server. The code works fine in debug mode but fails 
in release mode. Am i missing something? Do i need to include any 
windows libraries for this. This function is exported in mpr.dll under 
windows NT. I guess it is exported in User dll under windows. I have 
reporduced the code below.Any help is appreciated in advance.

	The code below runs fine in debug mode but produces bad pointer 
in release mode. Thanks for the help in advance.
	CString ServerDir;
	ServerPath.MakeUpper();
	UINT neterror;
	char driveletter='E';
	char connectinfo[255]; 
	connectinfo[0]='\0';
	if(ServerPath[0]=='\\' && ServerPath[1]=='\\')
	{
	  while(driveletter < 'Z')
	 {
		CString drive=(CString)driveletter+(CString)":";
		char *cdriveletter=new _far char[drive.GetLength()+1];
		cdriveletter[0]='\0';
		strcpy(cdriveletter,drive);
		//cdriveletter[strlen(cdriveletter)]='\0';
		
		
		UINT noofbytes;
		int indexofdir;
		AfxMessageBox((CString)cdriveletter);
		
neterror=WNetGetConnection((LPSTR)cdriveletter,(LPSTR)connectinfo,&noofbytes);
		delete ( char _far *) cdriveletter;
		if(neterror==WN_SUCCESS)
		{
			CString connectstr=(CString)connectinfo;
			connectstr.MakeUpper();   
			AfxMessageBox(connectstr);
			if(connectstr.Find(ServerPath)>=0)
			{
				CString msg=(CString)"Drive "+drive;
				AfxMessageBox(msg);
				ServerDir=drive+(CString)"\\";
				WriteProfileString(SERVER,DIR,ServerDir);
				break;
			}   
			else 
if(indexofdir=ServerPath.Find(connectstr)>=0)
			{
   				CString msg=(CString)"Drive 
"+drive+ServerPath.Right(ServerPath.GetLength()-connectstr.GetLength());				AfxMessageBox(msg);
				
ServerDir=drive+ServerPath.Right(ServerPath.GetLength()-connectstr.GetLength());
				WriteProfileString(SERVER,DIR,ServerDir);
				break;

			}
			else
			{
				driveletter++;
				continue;
			}
			
				
		}   
		else
		{
			delete []cdriveletter;
			driveletter++;
			continue;
		}
	}	


-- 
WM_THANKS|WM_REGARDS 

Veera
Sr.Software Engineer
                   ____________________________
                  |   Veeraraghavan . S.       |
                /)|  veera@honeywell.soft.net  |(\
               / )| Ph :011-91-80-2860356,357  |( \
            __(  (|____________________________|)  )__
           ((( \  \ >  /_)              ( \  < /  / )))
           (\\\ \  \_/  /                \  \_/  / ///)
            \          /                  \          /
              \      _/                     \_      /
               /    /                         \     \
              /    /                            \    \



funduc@sprynet.com
Sunday, June 09, 1996

Casting regular char buffers to CString probably causes some problems.  Creating 
CString objects in a loop is inefficient.  I would do this:

CString ServerDir;
ServerPath.MakeUpper();
UINT neterror;
char driveletter='E';
char connectinfo[255]; 
connectinfo[0]='\0';

	if(ServerPath[0]=='\\' && ServerPath[1]=='\\')
	{
	  CString drive;
	  CString cdriveletter;
	  UINT noofbytes;
	  int indexofdir;
	  CString connectstr;
	  CString msg;
	  while(driveletter < 'Z')
	 {
		drive=driveletter
		drive +=":";
		cdriveletter = drive;
		
		AfxMessageBox(cdriveletter);
		
	
neterror=WNetGetConnection((LPSTR)(LPCSTR)cdriveletter,(LPSTR)connectinfo,&noofb
ytes);
		if(neterror==WN_SUCCESS)
		{
			connectstr=connectinfo;
			connectstr.MakeUpper();   
			AfxMessageBox(connectstr);
			if(connectstr.Find(ServerPath)>=0)
			{
				msg = "Drive " + drive;
				AfxMessageBox(msg);
				ServerDir = drive + "\\";
				WriteProfileString(SERVER,DIR,ServerDir);
				break;
			}   
			else 
if(indexofdir=ServerPath.Find(connectstr)>=0)
			{
   				msg="Drive " + 
drive+ServerPath.Right(ServerPath.GetLength()-connectstr.GetLength());		
		AfxMessageBox(msg);
				
ServerDir=drive+ServerPath.Right(ServerPath.GetLength()-connectstr.GetLength());
				WriteProfileString(SERVER,DIR,ServerDir);
				break;

			}
			else
			{
				driveletter++;
				continue;
			}
			
				
		}   
		else
		{
			driveletter++;
			continue;
		}
	}	


On Thu, 06 Jun 1996, Veeraraghavan  wrote:
>Hi Everybody,
>
>	Environment : VC++ 1.52 , Windows 3.11
>
>	I have an application which needs to find out whether the user is 
>connected to the server through redirected local network device(for eg 
>f:). I am calling WNetGetConnection for each drive letter and checking 
>the second parameter(which is the resourcename) to see whether the user 
>is connected to the server. The code works fine in debug mode but fails 
>in release mode. Am i missing something? Do i need to include any 
>windows libraries for this. This function is exported in mpr.dll under 
>windows NT. I guess it is exported in User dll under windows. I have 
>reporduced the code below.Any help is appreciated in advance.
>
>	The code below runs fine in debug mode but produces bad pointer 
>in release mode. Thanks for the help in advance.
>
>
>-- 
>WM_THANKS|WM_REGARDS 
>
>Veera
>Sr.Software Engineer
>                   ____________________________
>                  |   Veeraraghavan . S.       |
>                /)|  veera@honeywell.soft.net  |(\
>               / )| Ph :011-91-80-2860356,357  |( \
>            __(  (|____________________________|)  )__
>           ((( \  \ >  /_)              ( \  < /  / )))
>           (\\\ \  \_/  /                \  \_/  / ///)
>            \          /                  \          /
>              \      _/                     \_      /
>               /    /                         \     \
>              /    /                            \    \
>
>
Mike Funduc
Funduc Software Inc.
funduc@sprynet.com
102372.2530@compuserve.com
http://home.sprynet.com/sprynet/funduc
http://ourworld.compuserve.com/homepages/funduc





| Вернуться в корень Архива |