Member Avatar for alexbnc

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) {
          InternetCloseHandle(hOpen);
          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);

     InternetCloseHandle(hFile);
     InternetCloseHandle(hOpen);
     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()

Member Avatar for 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.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.