Hola
Este codigo fue posteado por
escafandra respondiendole a
Yelian en este
hilo al probarlo me surgen las siguientes dudas
1- Donde pongo la primera parte del codigo ???
2- Al correr el programa me devuelve los siguientes errores
[C++ Error] Unit1.cpp(89): E2268 Call to undefined function 'URLDownloadToFile'
[C++ Warning] Unit1.cpp(90): W8004 'R' is assigned a value that is never used
A continuacion les pongo el codigo
Primera parte esta es la que no me queda clara dodne ponerlo, por lo tanto lo puse debajo de los #include
Código:
//---------------------------------------------------------------------------
bool Authenticate(HWND hWnd, char *URL)
{
HINTERNET hOpenHandle, hConnectHandle, hResourceHandle;
DWORD dwError, dwErrorCode;
char c;
URL_COMPONENTS URL_C = {sizeof(URL_COMPONENTS)};
URL_C.lpszScheme = &c;
URL_C.dwSchemeLength = 1;
URL_C.lpszHostName = &c;
// URL_C.dwHostNameLength = 0;
URL_C.lpszUserName = &c;
// URL_C.dwUserNameLength = 0;
URL_C.lpszPassword = &c;
// URL_C.dwPasswordLength = 0;
URL_C.lpszUrlPath = &c;
// URL_C.dwUrlPathLength = 0;
URL_C.lpszExtraInfo = &c;
// URL_C.dwExtraInfoLength = 0;
InternetCrackUrl(URL, strlen(URL), ICU_DECODE, &URL_C);
URL_C.lpszScheme = new char[URL_C.dwSchemeLength];
URL_C.lpszHostName = new char[URL_C.dwHostNameLength];
URL_C.lpszUserName = new char[URL_C.dwUserNameLength];
URL_C.lpszPassword = new char[URL_C.dwPasswordLength];
URL_C.lpszUrlPath = new char[URL_C.dwUrlPathLength];
URL_C.lpszExtraInfo = new char[URL_C.dwExtraInfoLength];
InternetCrackUrl(URL, strlen(URL), ICU_DECODE, &URL_C);
hOpenHandle = InternetOpen("Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
hConnectHandle = InternetConnect(hOpenHandle,
URL_C.lpszHostName,
INTERNET_INVALID_PORT_NUMBER,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
0,0);
hResourceHandle = HttpOpenRequest(hConnectHandle, "GET",
URL_C.lpszUrlPath,
NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION, 0);
delete URL_C.lpszScheme;
delete URL_C.lpszHostName;
delete URL_C.lpszUserName;
delete URL_C.lpszPassword;
delete URL_C.lpszUrlPath;
delete URL_C.lpszExtraInfo;
for(int n=0; n<2; n++){
HttpSendRequest(hResourceHandle, NULL, 0, NULL, 0);
dwErrorCode = hResourceHandle ? ERROR_SUCCESS : GetLastError();
dwError = InternetErrorDlg(hWnd, hResourceHandle, dwErrorCode,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS |
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA,
NULL);
if (dwError != ERROR_INTERNET_FORCE_RETRY)
break;
}
return (dwError != ERROR_INTERNET_FORCE_RETRY);}
Segunda parte esto va en el boton y los errores que me devuelve son de aqui
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char File[] = "http://www.terawiki.clubdelphi.com/CPPBuilderWin32/Ejemplos/?download=Otro+Usuario.rar";
HRESULT R;
Authenticate(Handle, File);
R = URLDownloadToFile(0, File, "C:\\File.rar", 0, 0);
}
tercera parte estas son las librerias a incluir
Código:
#pragma link "$(BCB)\\lib\\PSDK\\Urlmon.lib"
#pragma link "$(BCB)\\lib\\PSDK\\Wininet.lib"
Espero me puedan explicar un poco !!!
__________________
Nunca esta de más volver a ver la
"Guia de Estilo" o
"La Otra Guia de Estilo". Recuerda siempre usar los
"Tags" para una mejor legibilidad de tu código.
Cuando miras fijamente al abismo, este te devuelve la mirada
oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________