-
March 31st, 2004, 07:35 AM
#1
CFtpConnection::Command won't compile!
I need some help . The CFtpConnection object in the code below seems to work well if I comment out the
"if(pFTPSite->Command..." function.
However, when the command function is not commented out, a compilation error occurs.
What is causing this error? The CFtpConnection object is obviously working for the other functions. I have included afxinet.h in the file. I've also installed the latest SDK and added wininet.lib to the project settings for the linker (something I saw in another thread).
The error is,
c:\Visual C++ Applications\UnixScriptGenerator\RunScriptWizard.cpp(929) : error C2039: 'Command' : is not a member of 'CFtpConnection'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxinet.h(371) : see declaration of 'CFtpConnection'
c:\Visual C++ Applications\UnixScriptGenerator\RunScriptWizard.cpp(929) : error C2065: 'CmdRespNone' : undeclared identifier
The code is,
void CRunScriptSTDIODialog::RetrieveInputList()
{
CInternetSession sess;
CFtpConnection* pFTPSite = NULL;
CUnixScriptGeneratorDoc* pDoc = CUnixScriptGeneratorDoc::GetDocument();
ASSERT_VALID(pDoc);
UpdateData(TRUE);
try{
pFTPSite = sess.GetFtpConnection(pDoc->pDefaultCProfile->m_strFTPServerID,
pDoc->pDefaultCProfile->m_strUserID,pDoc->pDefaultCProfile->m_strUserPassword,
(INTERNET_PORT)pDoc->pDefaultCProfile->m_nPortNumber);
if(pFTPSite->SetCurrentDirectory(pDoc->newRunScript.m_strRemotePathToInputFiles)==0){
AfxMessageBox("Could not set current directory on ftp site",MB_ICONEXCLAMATION);
}
if(pFTPSite->Command("ls *.inp > UnixScriptGenTemp", CmdRespNone, FTP_TRANSFER_TYPE_ASCII, 1)==0){
AfxMessageBox("Could not perform ls command on ftp site",MB_ICONEXCLAMATION);
}
}
catch (CInternetException* pEx){
AfxGetApp()->LoadStandardCursor(IDC_ARROW);
pEx->ReportError(MB_ICONEXCLAMATION);
pFTPSite = NULL;
pEx->Delete();
}
delete pFTPSite;
}
btw, I'm running on a Windows 2000 Professional box.
-
March 31st, 2004, 08:41 AM
#2
Hi!
The compiler wrote you:
'Command' : is not a member of 'CFtpConnection'
And what do you want now?
Are you sure your CFtpConnection class still has this method?
I don't know which methods does CFtpConnection contain in VC7, but in VC6 there is no such method
Regards
-
March 31st, 2004, 08:56 AM
#3
If you check MSDN online,
http://msdn.microsoft.com/library/de...ioncommand.asp
you will see that they list Command as one of CFtpConnection's member functions. Additionally, as I type the line of code in, a popup list of available functions appear and Command is one of them. I even selected the function from the popup list. It appears to me that all of the documentation is in place, but the function itself was left out. I am hoping this is not the case because I need to be able to run a command in an ftp connection on a remote server.
-
March 31st, 2004, 09:13 AM
#4
Hmmm...
Thanks for the link to MSDN online.
Unfortunately, i cannot every time look at "MSDN online" and my MSDN is from october 2000.
BTW, have you seen the "declaration of 'CFtpConnection'" in
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxinet.h(371), as your compiler had recommended you?
Is there CFtpConnection Command method declared?
-
March 31st, 2004, 09:41 AM
#5
Per your suggestion, I looked in afxinet.h and found the following.
#if _WIN32_IE >= 0x0500
CInternetFile* Command(LPCTSTR pszCommand, CmdResponseType eResponse = CmdRespNone,
DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
DWORD_PTR dwContext = 1);
#endif
It appears that the Command function is only available if the condition,
_WIN32_IE >= 0x0500
is met. What does this mean?
-
March 31st, 2004, 09:53 AM
#6
According to MSDN ("Using the SDK Headers"):
_WIN32_IE >= 0x0500 means that Minimum System Required is Internet Explorer 5.0 and later, i.e Internet Explorer 5.0 or later (or several DLL that are disributed with IE 5.0) must be installed on your computer
-
March 31st, 2004, 09:55 AM
#7
From afxinet.h
Code:
#if _WIN32_IE >= 0x0500
CInternetFile* Command(LPCTSTR pszCommand, CmdResponseType eResponse = CmdRespNone,
DWORD dwFlags = FTP_TRANSFER_TYPE_BINARY,
DWORD_PTR dwContext = 1);
#endif
It looks like you need InternetExplorer v 5.00 or later ...
Hope it helps
Did it help? rate it.
The best conversation I had was over forty million years ago ... and that was with a coffee machine.
-
March 31st, 2004, 09:57 AM
#8
Thanks. I found that info too after I made my last post. I checked and as I thought, I'm running IE 6.0 sp1. So somewhere it is not picking up the correct version of IE.
-
March 31st, 2004, 10:05 AM
#9
_WIN32_IE is defined at afxv_w32.h ... but it seems to be defined not as your actual version (I'm running IE 6.0 and my define looks like #define _WIN32_IE 0x0560) ...
So, good question! What is really _WIN32_IE?
Perhaps IE version at NET installation time?
Did it help? rate it.
The best conversation I had was over forty million years ago ... and that was with a coffee machine.
-
March 31st, 2004, 10:09 AM
#10
Problem solved. I think.
I first tried redefining in the source file containing the function but that didn't work.
#define _WIN32_IE 0x0600
So then I looked in stdafx.h and found it was defined as 0x0400.
I redefined it there by changing it to 0x0600 and now the compilation recognizes Command. However, it is still barking on CmdRespNone.
-
March 31st, 2004, 10:20 AM
#11
After a little search:
afxv_w32.h(39): #define _WIN32_IE 0x0560
h files in C:\...\Vc7\PlatformSDK\Include\ : #define _WIN32_IE 0x0501
all stdafx.h files : #define _WIN32_IE 0x0400
Are we expected to manually update the definition??
Did it help? rate it.
The best conversation I had was over forty million years ago ... and that was with a coffee machine.
-
March 31st, 2004, 10:33 AM
#12
I can now successfully compile. I had to supply scope resolution to get CmdResponseNone to work. See the code below. My only problem now is that the command fails in execution because the ls is getting converted to caps somehow. It's never easy!
if(pFTPSite->Command("ls *.inp > UnixScriptGenTemp", CFtpConnection::CmdRespNone, FTP_TRANSFER_TYPE_ASCII, 1)==0){
AfxMessageBox("Could not perform ls command on ftp site",MB_ICONEXCLAMATION);
}
Thanks for all the help!
-
March 31st, 2004, 12:38 PM
#13
Well I think I have it all figured out now. Although, someone may prove me wrong. It turns out that the set of commands that are available with CFtpConnection::Command are not the same set of commands available to a user in an ftp session. This is a difference in a data ftp connection vs. a control ftp connection. The commands that are available are (at least on the ftp server I'm using),
ftp> remotehelp
214-The following commands are recognized (* =>'s unimplemented).
USER PORT STOR MSAM* RNTO NLST MKD CDUP PBSZ*
PASS PASV APPE MRSQ* ABOR SITE XMKD XCUP PROT*
ACCT* TYPE MLFL* MRCP* DELE SYST RMD STOU SIZE
SMNT* STRU MAIL* ALLO CWD STAT XRMD AUTH* MDTM
REIN* MODE MSND* REST XCWD HELP PWD ADAT*
QUIT RETR MSOM* RNFR LIST NOOP XPWD CCC*
214 Direct comments to user@hostname.
ftp>
So my solution was to discard using this Command function altogether and use instead the class CFtpFileFind which has a code sample in MSDN that provided me the list of files I wanted for my program.
-
April 6th, 2004, 08:59 AM
#14
Try this :
->Command("SITE ls")
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|