[SOLUCIONADO] Duda de libreria urlmon

Iniciado por Javierms, Marzo 16, 2013, 01:51:02 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 16, 2013, 01:51:02 AM Ultima modificación: Septiembre 09, 2014, 08:40:22 PM por Expermicid
Puesto que he expuesto una duda muy extensa voy a intentar definir mejor la pregunta.

Quiero poder descargar un archivo con c++

Tengo un ejemplo con urlmon.h pero a la hora de compilar #include <urlmon.h>  no lo encuentra.

así que lo descargo y lo guardo en la carpeta pero luego a la hora de compilar aparece un error dentro de urlmon.h que no encuentra msxml.h y si no es un problema a la hora de compilar es otro.

como puedo hacer un downloader que compile bien¿?

A ver si así podéis aclararme algo chicos.



Esa librería forma parte del SDK de Windows por lo que he leido. ¿lo tienes instalado?
Regístrate en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Marzo 21, 2013, 12:15:34 AM #2 Ultima modificación: Febrero 08, 2014, 04:54:01 PM por Expermicid
Avesudra gracias por responder, me he instalado el sdk y aun así no soy capaz de compilarlo por lo menos en code::block que es el ide que estoy utilizando. Me sigue apareciendo este error: (urlmon.h: No such file or directory)

este es el code de ejemplo que utilizo:

Código: c
#include <windows.h>
#pragma comment(lib, "urlmon.lib")
#include <urlmon.h>
#include <stdio.h>

int main(void)
{
   HRESULT hr;
   char url[] = "http://www.cualquierweb.com/lib.txt";
   char local[] = "C:\\rirTemp\\Readme.txt";

   hr = URLDownloadToFile(NULL, url, local, 0, NULL);

   if (hr == S_OK){
      puts("Download OK");
      return EXIT_SUCCESS;
   }else {
      puts("There was an error");
      return EXIT_FAILURE;
   }
}

Marzo 21, 2013, 10:21:55 PM #3 Ultima modificación: Marzo 21, 2013, 10:25:22 PM por avesudra
Una vez instalada si no me equivoco, debe haberte aparecido en archivos de programa una carpeta cuyo nombre es "Microsoft SDKs" dentro de ella me parece que hay varias carpetas según las versiones que estén instaladas, supongo que en ellas habrá unos ficheros de cabecera y los fuente, y las librerías compiladas, pues bien vete al Search Directories de codeblocks ( pestaña opciones -> compilador -> pestaña search directories).en la pestaña compiler debes agregar la carpeta Include, y en la pestaña  linke deberías agregar las librerías compiladas que no sé donde están pero no deben de andar muy lejos, busca carpetas como (lib , .lib, bin etc).

Siento no ser tan preciso, no tengo Windows instalado ahora mismo.

Esto puede servirte de guía, la carpeta por lo que veo es "Lib"

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Regístrate en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Muchas gracias Avesudra me estas siendo de gran utilidad y la verdad voy por buen camino, haciendo lo que me dices al final he encontrado la ruta que en windows 8 es: "C:\Program Files (x86)\Windows Kits\8.0\" ahi estan las carpetas "lib" he "include" también tengo la carpeta sdk "C:\Program Files (x86)\Microsoft SDKs\" pero ahí no se encuentran dicho archivos por eso seguí buscando y logre dar con la primera ruta.

Ahora una vez tengo todo agregado, compilo el programa y mi programa no da ningún error sin embargo aparecen muchos errores, os muestro una captura.



Hola, tengo una idea general de como hacerlo pero como todo esto es un mundo pues... Bueno como te dice ahí debes definir una arquitectura, vete a Options -> Compiler , justo en esa ventana abajo tienes un montón de "Compiler Flags" , si desplazas eso hacia abajo, hay unos cuantos que empiezan con Pentium no se que y no se cuanto busca cual es tu procesador y lo pones, en caso de no ver nada pon el que quieras.
Regístrate en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Lo que comenta Psymera no está mal, aunque no está de más saber instalar cosas con autonomía en tu IDE preferido.
Regístrate en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Nunca crei que fuera tan complicado.... o mas bien tan lioso
A ver mi cpu es i7 y en code::block solo hay hasta el core2duo que aun así marcando las opciones del procesador no se solucionan :S

bien... ahora probando lo que dice psymera pongo el mismo código en visualstudio y al compilar me aparecen estos errores.

No se si por que es visualc++ y no c++ o porque, pero estoy hecho un lío y solo quiero que funcione!!


Marzo 23, 2013, 09:09:47 AM #8 Ultima modificación: Marzo 23, 2013, 09:12:26 AM por avesudra
Bueno ya probaré yo un día de estos en Codeblocks cuando virtualice un Windows. En cuanto a esos errores, pues haz lo que te comenta el compilador, agrega stdafx.h y como los LPWSTR son typedef's de wchar_t * pues lo pones como un arreglo de LPWSTR:
Código: cpp
#include <windows.h>
#include <stdafx.h>
#include <urlmon.h>
#include <cstdio>

int main(void)
{
    HRESULT hr;
    LPCWSTR url[] = "http://www.cualquierweb.com/lib.txt";
    LPCWSTR local[] = "C:\\rirTemp\\Readme.txt";

    hr = URLDownloadToFile(NULL, url, local, 0, NULL);

    if (hr == S_OK)
    {
        puts("Download OK");
        return EXIT_SUCCESS;
    }
    else
    {
        puts("There was an error");
        return EXIT_FAILURE;
    }
}
Regístrate en No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Marzo 25, 2013, 11:34:36 AM #9 Ultima modificación: Febrero 08, 2014, 04:54:16 PM por Expermicid
he modificado el codigo y aun asi no lo he hecho funcionar, que lio esto de que en visual tenga que ser de una manera y en code::blocks de otra :S

os dejo el codigo y el screenshot de los errores

Código: c
#include <stdafx.h>
#include <urlmon.h>
#include <cstdio>

int main(void)
{
    HRESULT hr;
    LPCWSTR url = L"http://www.cualquierweb.com/lib.txt";
    LPCWSTR local = L"C:\\rirTemp\\Readme.txt";

    hr = URLDownloadToFile(NULL, url, local, 0, NULL);

    if (hr == S_OK)
    {
        puts("Download OK");
        return EXIT_SUCCESS;
    }
    else
    {
        puts("There was an error");
        return EXIT_FAILURE;
    }
}


¿Tan dificil es hacer un downloader que compile?



En Code::Blocks no funciona la siguiente instrucción al precompilador:

Código: c
#pragma comment(lib, "urlmon.lib")


Eso es para VS.

Tiene que haber un parametro que se le pasa al linker para linkear esa librería pero desconozco cual es. Yo que tu la cargaría en memoria con la API GetProcAdress y listo  ;)

un saludo.