URLDownloadToFileA funciona en VB6 pero no en basic .net 2003

14/04/2005 - 13:19 por MalagaEquipo | Informe spam
Esta funcion api funciona sin problemas sobre vb6 pero no en visual basic
studio .net 2003

¿Alguien sabe decirme porque?



La declaracion para URLDownloadToFile es la siguiente

Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As
Long

La funcion se llama de la siguiente manerareturnValue = URLDownloadToFile(0,
"http://www.microsoft.com/ms.htm", _
"c:\ms.htm", 0, 0)

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
14/04/2005 - 15:32 | Informe spam
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String,
ByVal _ szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB
As Long) As Long



Es que Long en VB6 no es lo mismo que Long en VB.NET. Pero no hace falta que
uses APIs para bajar archivos en .NET. Usa la clase WebClient:

Dim wc As New System.Net.WebClient

wc.DownloadFile("http://www.microsoft.com/ms.htm", "c:\ms.htm")

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
http://spaces.msn.com/members/emorcillo/
Respuesta Responder a este mensaje
#2 MalagaEquipo
14/04/2005 - 17:35 | Informe spam
Agradezco tu sugerencia sobre la clase webclient

anteriormente la he usado, pero tuve que descartarla porque parece inestable
segun en que equipos se ejecute.
Tal vez puedas arrojar un poco de luz sobre su funcionamiento interno.
Hize una pequeña aplicacion de prueba que usaba la clase webclient para
bajar en un fichero de internet o de la intranet dando como parametro
una url valida.

Lo ejecute en mi equipo y cuando usaba la funcion
x.downloadFile(url,destino) se colgaba la aplicacion y generaba una
excepcion.

El mismo programa lo ejecute en otros equipos y funcionaba perfectamente en
unos si y en otros no con la dichosa excepcion.
Todos estos equipos tienen instalado el runtime de .net para ejecutar
aplicaciones de este tipo.

Concretamente en uno de los equipos que no funcionaba la clase webclient,
fue formateado y reinstalado el sistema operativo xp y el runtime de .net
y ahora el programa funcionaba perfectamente.
Lo que desconozco es en que situacion la clase webclient deja de funcionar.


Usando en VB6 la funcion api aqui descrita y en todos los casos y equipos
funcionaba bien.
la alternativa para usar una funcion que me permitiera bajar un fichero o el
contenido de una url de forma fiable y que funcionase en cualquier equipo
era usar esta api o utilizar sockets, todo esto sobre VB6 donde la unica
forma de pasar estas funciones era encapsulando el ejecutable como activex
y luego usarlo en VB.NET.

por otro lado la clase webclient no me permite usar como url direcciones
donde se incluyan usuario y contraseña
ejemplo:
http://usuario:contraseñ

he de usar este formato para una url dentro de nuestra intranet y solo
usando api puedo conseguirlo.


¿Es posible hacer funcionar la funcion api URLDownloadToFileA en VB.Net?
¿Algun ejemplo especifico y probado para .NET?.
¿Cual puede ser la causa de que webclient solo funcione en algunos equipos?
¿Que hace exactamente la clase webclient internamente?, supongo que a bajo
nivel usara tambien apis o algun controlador y pueda ayudar a descubrir
porque no funciona en todos los casos.
¿Que se puede hacer para usar la clase webclient con url que incluyen el
usuario y contraseña de acceso a esa pagina?.

Muchas Gracias.




"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String,
ByVal _ szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB
As Long) As Long



Es que Long en VB6 no es lo mismo que Long en VB.NET. Pero no hace falta
que
uses APIs para bajar archivos en .NET. Usa la clase WebClient:

Dim wc As New System.Net.WebClient

wc.DownloadFile("http://www.microsoft.com/ms.htm", "c:\ms.htm")

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
http://spaces.msn.com/members/emorcillo/


Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
14/04/2005 - 18:14 | Informe spam
Lo ejecute en mi equipo y cuando usaba la funcion
x.downloadFile(url,destino) se colgaba la aplicacion y generaba una
excepcion.



Habria que ver cual era la excepcion para poder saber cual era el problema.

¿Es posible hacer funcionar la funcion api URLDownloadToFileA en
VB.Net?



Si, es posible. Aunque no es recomendable usar APIs directamente si el
framework provee una forma de hacerlo. Esto se debe a que muchas APIs
dependen del SO sobre el que corre la aplicacion o funcionan de forma
diferente en los distintos SO.

¿Que se puede hacer para usar la clase webclient con url que incluyen
el usuario y contraseña de acceso a esa pagina?.



Dim wc As New Net.WebClient

wc.Credentials = New Net.NetworkCredential("usuario", "password")
wc.DownloadFile ...

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C
http://spaces.msn.com/members/emorcillo/
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida