2010-02-03 2 views
1
try 
{  

    pConnect = sess->GetFtpConnection(ftpArgs.host, ftpArgs.userName, ftpArgs.password, port, FALSE); 
} 
catch (CInternetException* pEx) 
{ 
    loginErrCode = GetLastError(); 
    printf("loginErrCode: %d\n", loginErrCode); 

    if(loginErrCode == 12013) 
    { 
     printf("Incorrect user name!\n"); 
     exit(0); 
    } 
    else if(loginErrCode == 12014) 
    { 
     printf("Incorrect password!\n"); 
     exit(0); 
    } 
    else if(loginErrCode == 12007) 
    { 
     printf("Incorrect server name!\n"); 
     exit(0); 
    } 
    else //display all other errors 
    { 
     TCHAR sz[1024]; 
     pEx->GetErrorMessage(sz, 1024); 
     printf("ERROR! %s\n, sz); 
     pEx->Delete(); 
     exit(0); 
    } 

의도적 인 잘못된 사용자 이름으로 Visual Studio에서이 코드를 실행하면 GetLastError()가 12014 (예상)를 반환합니다.GetLastError()가 디버그 대 "정상"실행 중 다른 코드를 반환하는 이유는 무엇입니까?

그러나 GetLastError()는 2를 반환합니까? (GetErrorMessage()은 잘못된 암호를 반환합니다.)

차이점을 이해할 수 없습니다.

또한 디버깅을 위해 Visual Studio에서 프로세스를 연결하는 동안 명령 줄에서 프로그램을 실행했습니다. 나는 디버거가 관련 될 때마다 나도 같은 매개 변수를 "보통"실행 파일을 실행하면, 나는 내가 실행할 때 2.

는 WinInet이 오류 코드가 발견되지 않는 얻을 12014.을 얻을

12014.을 받았다 디버거 외부의 프로그램? 프로그램을 다르게 컴파일해야합니까?

도움을 주시면 감사하겠습니다. 고맙습니다.

답변

4

내 메모리가 약간 흐릿한 것이지만 개체의 m_dwError 필드를 사용하면 어떻게됩니까? GetLastError()?

내 생각 엔 실제 오류와 GetLastError() 전화가 연결될 때마다 오류 코드가 재설정 될 수 있습니다. 디버거 외부에서는 실행되지만 디버거 내부에서는 실행되지 않는 이유는 알 수 없습니다. 그러나 MFC는 throw 된 개체에 예외를 발생시킨 오류 코드를 캐시하므로 예외가 throw 된 이후 발생한 API 호출에 관계없이 캐싱 된 값을 사용할 수 있어야합니다.

GetErrorMessage()GetLastError()이 아닌 m_dwError 필드를 사용하므로 올바른 오류 문자열을 반환합니다.

+0

m_dwError (http://msdn.microsoft.com/en-us/library/29tbaeyz%28VS.80%29.aspx) 대신 작동합니다. 감사. –

관련 문제