Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: Javierms en Marzo 16, 2013, 01:51:02 AM

Título: [SOLUCIONADO] Duda de libreria urlmon
Publicado por: Javierms en Marzo 16, 2013, 01:51:02 AM
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.


Título: Re:Duda de libreria urlmon
Publicado por: avesudra en Marzo 19, 2013, 06:36:50 PM
Esa librería forma parte del SDK de Windows por lo que he leido. ¿lo tienes instalado?
Título: Re:Duda de libreria urlmon
Publicado por: Javierms en Marzo 21, 2013, 12:15:34 AM
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:

#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;
   }
}
Título: Re:Duda de libreria urlmon
Publicado por: avesudra en Marzo 21, 2013, 10:21:55 PM
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"

http://software.intel.com/sites/manageability/AMT_Implementation_and_Reference_Guide/DOCS/Implementation%20and%20Reference%20Guide/default.htm?turl=WordDocuments%2Flinkingtomicrosoftplatformsdklibraries.htm
Título: Re:Duda de libreria urlmon
Publicado por: Javierms en Marzo 22, 2013, 12:59:04 AM
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.


(http://img705.imageshack.us/img705/1465/errorcomplilador.jpg)
Título: Re:Duda de libreria urlmon
Publicado por: avesudra en Marzo 22, 2013, 04:38:46 PM
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.
(http://img59.imageshack.us/img59/5430/capturadepantallade2013z.png)
Título: Re:Duda de libreria urlmon
Publicado por: avesudra en Marzo 22, 2013, 08:07:20 PM
Lo que comenta Psymera no está mal, aunque no está de más saber instalar cosas con autonomía en tu IDE preferido.
Título: Re:Duda de libreria urlmon
Publicado por: Javierms en Marzo 22, 2013, 11:50:17 PM
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!!

(http://img580.imageshack.us/img580/1776/errorcompilar.jpg)
Título: Re:Duda de libreria urlmon
Publicado por: avesudra en Marzo 23, 2013, 09:09:47 AM
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) [Seleccionar]
#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;
    }
}
Título: Re:Duda de libreria urlmon
Publicado por: Javierms en Marzo 25, 2013, 11:34:36 AM
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

#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?

(http://img189.imageshack.us/img189/9991/capturavv.jpg)
Título: Re:Duda de libreria urlmon
Publicado por: Juan en Abril 02, 2013, 07:37:29 PM
En Code::Blocks no funciona la siguiente instrucción al precompilador:

#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.