Скачать MetaTrader 5

Помогите с проблемой wininet.dll

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Viktor Zhelnov
1186
Viktor Zhelnov  
Привет. Помогите разобраться. При вызове функции HttpQueryInfoA при попытке получить дату создания файла, функция возвращает 0, такое же происходит и при запросе размера файла. Из-за чего это может быть? 
int BufLen=256;
  int ind=0;
  int buf0[256];
  string s="";
  int LastModified_HttpQueryInfoA=0;
  int iRes;
  iRes=HttpQueryInfoA(hURL,HTTP_QUERY_LAST_MODIFIED,buf0,BufLen,ind);
  if(iRes<=0)
  {
    Print("Ошибка при вызове HttpQueryInfoA()");
  }
  else
  {
    s="";
    for(int k = 0; k < BufLen; k++)
    {
      s=s+CharToStr(buf0[k]);
    }
    if(StringLen(s) > 0) LastModified_HttpQueryInfoA=StrToInteger(s);
  }
  if(LastModified_HttpQueryInfoW > 0)
  {
    Print("Дата изменения = ",LastModified_HttpQueryInfoA);
  }
  else
  {
    Print("Дата изменения неизвестна");
  }
Dmitry Fedoseev
43505
Dmitry Fedoseev  

Если для буфера используется массив из 256-ти интов, его размер 1024.

Покажите как объявляете HttpQueryInfoA().

Viktor Zhelnov
1186
Viktor Zhelnov  
Вот объявления всех функций wininet.dll. С 1024 тоже не работает. Причем постоянно возвращает 0, пробовал GetLastError() использовать - ошибок никаких нет.

#import "wininet.dll"
int InternetAttemptConnect(int x);
int InternetOpenA(string sAgent,int lAccessType,string sProxyName="",string sProxyBypass="",int lFlags=0);
int InternetOpenUrlA(int hInternetSession,string sUrl,string sHeaders="",int lHeadersLength=0,int lFlags=0,int lContext=0);
int InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]);
int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);
int InternetCloseHandle(int hInet);
#import
Dmitry Fedoseev
43505
Dmitry Fedoseev  

Попробуйте вместо

int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);

Вот так:

int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int & lpdwBufferLength[],int &lpdwIndex);

Также, как с int InternetReadFile(...

Dmitry Fedoseev
43505
Dmitry Fedoseev  
С последним параметром lpdwIndex тоже также, если он по ссылке передается.
Viktor Zhelnov
1186
Viktor Zhelnov  
Так это же по сути длина буфера, как я тогда считывать с него буду? Попробовал, не помогло, все равно в ответ 0. В InternetReadFile(int hFile,int &sBuffer[],int lNumBytesToRead,int &lNumberOfBytesRead[]) тоже ведь указан буфер и размер его следом.
Viktor Zhelnov
1186
Viktor Zhelnov  
Оба менял, не помогает.
Dmitry Fedoseev
43505
Dmitry Fedoseev  

Вот при таком объявлении:

   int   HttpQueryInfoA(      int         hRequest,
                              int         dwInfoLevel,
                              int      &  lpvBuffer[],
                              int      &  lpdwBufferLength[],
                              int      &  lpdwIndex[]);
и вызове с флагом HTTP_QUERY_CONTENT_LENGTH, работает.
Viktor Zhelnov
1186
Viktor Zhelnov  
А можешь еще пожалуйста привести фрагмент кода с определением CONTENT LENGTH.
Viktor Zhelnov
1186
Viktor Zhelnov  
У меня при таком объявлении:

int HttpQueryInfoA(int hRequest,int dwInfoLevel,int &lpvBuffer[],int &lpdwBufferLength[],int &lpdwIndex[]);
И при таком объявлении переменных:

int BufLen[1024];
  int ind[0];
  int buf0[256];
  string s="";
  int NewModified=0;
  int iRes;
  iRes=HttpQueryInfoA(hURL,HTTP_QUERY_LAST_MODIFIED,buf0,BufLen,ind);
  if(iRes<=0)
  {
    Print("Ошибка при вызове HttpQueryInfoA()");
    Inf="Ошибка получения информации о файле";
    Info(Inf);
  }
Все равно не работает.
Christo Tsvetanov
990
Christo Tsvetanov  

Впринципе, некоторые веб серверы такую информацию и не дают. Там докачки не поддерживают и т.д. Проверьте сначало сервер - вернее настройки сервера.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий