I want to get the information downloaded from a file (a BMP image) into a char array. I have this function

#define _countof(x) (sizeof(x) / sizeof(x[0]))

char* DownloadBytes(char* szUrl) {
     HINTERNET hOpen = NULL;
     HINTERNET hFile = NULL;
     char* data = (char*)"";
     DWORD dataSize = 0;
     DWORD dwBytesRead = 0;

     hOpen = InternetOpen("MyAgent", NULL, NULL, NULL, NULL);
     if(!hOpen) return (char*)"";

          hFile = InternetOpenUrl(hOpen, szUrl, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, NULL);
          if(!hFile) {
          return (char*)"";

     do {
          char buffer[2000];
          InternetReadFile(hFile, (LPVOID)buffer, _countof(buffer), &dwBytesRead);
          char* tempData = new char[dataSize + dwBytesRead];
          memcpy(tempData, data, dataSize);
          memcpy(tempData + dataSize, buffer, dwBytesRead);
          delete[] data;
          data = tempData;
          dataSize += dwBytesRead;
     } while (dwBytesRead);

     return data;

The problem is that I only get the first three bytes of the file and I really don't have any idea of what could be wrong. I am using CodeBlocs + MinGW, on Windows 7. This function is exported into a DLL, but I don't think it does matter. The only thing I can verify is that buffer gets the downloaded data correctly. Something goes wrong with memcpy()

5 Years
Discussion Span
Last Post by alexbnc

You have my project uploaded here. It is compiled and you have the Release executable if you want to test it. http://www.devimperium.info/DownloadFile.zip

Please, tell me if this works on your computers. The project type is CodeBlocks but I suppose that you can get those files into any IDE.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.