Click here to Skip to main content
15,890,512 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
This is perplexing me... I am writing a DLL to provide FTP upload and download functionality. I am using the Windows INET API's to achieve this, and when I make a call to InternetConnect() it fails with error code 6 (Invalid Handle Value). I was trying to figure out why it kept failing, so I added a call to InternetGetLastResponseInfo() and it magically started working. I commented out the call and it stopped working. I repeated this several times. It doesn't matter where I put the call to InternetGetLastResponseInfo() either, as long as the function is called at some point, it works. If I comment out the call, then the call to InternetConnect() fails.

C++
ATCFTP_EXTERN bool atcftp_put(
	char *server, 
	int port, 
	char *username, 
	char *password, 
	char *localfile, 
	char *remotefile, 
	ATCFTP_CALLBACK progress, 
	int id )
{

	HINTERNET hInet, hFTP, hFile;
	FILE *pFile;
	long total;
	long left;
	char *buffer;


	#ifdef DEBUG
	buffer = (char*) malloc( 512 );
	memset( buffer, 0, 512 );
	sprintf( buffer, "Server = \"%s\"\nPort = \"%d\"\nUsername = \"%s\"\nPassword = \"%s\"", server, port, username, password );
	MessageBox( NULL, buffer, "ATCFTP DEBUG", MB_OK | MB_ICONINFORMATION );
	#endif


	// Open Internet Connection
	if( NULL != progress )
		progress( id, ATCFTP_STATUS_PREPARING, 0, 0 );
	if( NULL == (hInet=InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG , NULL, NULL, 0)) )
	{
		#ifdef SHOW_ERRORS
		ShowError( "InternetOpen");
		#endif
		return false;
	}



	
	// Connect to FTP server
	if( NULL != progress )
		progress( id, ATCFTP_STATUS_CONNECTING, 0, 0 );
	if( NULL == (hFTP=InternetConnect(hInet,server,port,username,password,INTERNET_SERVICE_FTP,0,0)) )
	{
		#ifdef SHOW_ERRORS
		ShowError( "InternetConnect" );
		DWORD dwError;
		char lpszBuffer[512];
		DWORD dwBufferLength = sizeof(lpszBuffer);
		InternetGetLastResponseInfo( &dwError, lpszBuffer, &dwBufferLength );
		MessageBox( NULL, lpszBuffer, "ATCFTP ERROR", MB_OK | MB_ICONERROR );
		#endif
		InternetCloseHandle(hInet);
		return false;
	}

		
	
	return true;
	
}
Posted
Comments
cariolihome 5-Sep-11 17:18pm    
I tried Your code and it works without any call to InternetGetLastResponseInfo function.
May be atcftp_put function parameters are wrong.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900