InternetGetLastResponseInfo возвращает странные символы вместо сообщения об ошибке

0

После вызова FtpOpenFile я использую следующий код:

error=GetLastError();
if(error!=0)
{
    if(error==ERROR_INTERNET_EXTENDED_ERROR)
    {
        InternetGetLastResponseInfo(&error,NULL,&bufferLength);
        buffer=malloc(bufferLength);
        InternetGetLastResponseInfo(&error,buffer,NULL);
        printf("FtpOpenFile error : %s.\n",buffer);
    }
    else
    {
        printf("FtpOpenFile error : %d.\n",(int)error);
    }
}

Я подтвердил, что ошибка = ERROR_INTERNET_EXTENDED_ERROR, но вместо того, чтобы печатать что-то вроде

Ошибка FtpOpenFile: сервер отклонил запрос из-за того, что у него есть личная неприязнь или, другими словами, тонкая ненависть к вам.

Это дает мне

Ошибка FtpOpenFile: x?.

Благодарю.

  • 0
    Самостоятельная боль. InternetGetLastResponseInfo () возвращает BOOL. Вы получили ЛОЖЬ, но вы не проверяете это, поэтому вы не знаете, почему это не работает. Всегда утверждать возвращаемые значения.
Теги:
ftp
wininet

1 ответ

1

Ваш второй вызов IntergetGetLastResponseInfo неверен; вы не передаете длину буфера по мере необходимости. Первый вызов, который вы делаете, извлекает размер необходимого буфера, но вы все равно должны сказать функции, насколько большой буфер, когда вы вызываете его во второй раз. (Также обратите внимание, что в документации указано, что значение, возвращаемое в первом вызове, не включает пробел для оканчивающегося нуля.)

InternetGetLastResponseInfo(&error, NULL, &bufferLength);
buffer = malloc(bufferLength + 1);
InternetGetLastResponseInfo(&error, buffer, &bufferLength);

Дополнительную информацию см. В документации по InternetGetLastReponseInfo.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню