Telecharger un fichier FACILEMENT en C++

Le
Jordan
Bonjour,
Je cherche un bout de code qui me permettrai de télécharger un fichier
en c++. La seul lib qui semblai simple est plutôt impossible a
installer, UrlMon. Il manque tout le temps un fichier, d'abord
msxml.h, après log4cxx, relou.
Je code avec CodeBlocks une appli win32.
Merci d'avance.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #19635571
On 25 juin, 12:57, Jordan
Bonjour,
Je cherche un bout de code qui me permettrai de télécharger un fichie r
en c++. La seul lib qui semblai simple est plutôt impossible a
installer, UrlMon. Il manque tout le temps un fichier, d'abord
msxml.h, après log4cxx, relou.
Je code avec CodeBlocks une appli win32.



Le plus simple est avec URLDownloadToFile()
Jordan
Le #19636651
On 25 juin, 15:58, Christian ASTOR
On 25 juin, 12:57, Jordan
> Bonjour,
> Je cherche un bout de code qui me permettrai de télécharger un fich ier
> en c++. La seul lib qui semblai simple est plutôt impossible a
> installer, UrlMon. Il manque tout le temps un fichier, d'abord
> msxml.h, après log4cxx, relou.
> Je code avec CodeBlocks une appli win32.

Le plus simple est avec URLDownloadToFile()



Oui c'est sur mais j'ai un gros probleme avec la librairie urlmon.
Jordan
Le #19637101
On 25 juin, 18:18, Jordan
On 25 juin, 15:58, Christian ASTOR
> On 25 juin, 12:57, Jordan
> > Bonjour,
> > Je cherche un bout de code qui me permettrai de télécharger un fi chier
> > en c++. La seul lib qui semblai simple est plutôt impossible a
> > installer, UrlMon. Il manque tout le temps un fichier, d'abord
> > msxml.h, après log4cxx, relou.
> > Je code avec CodeBlocks une appli win32.

> Le plus simple est avec URLDownloadToFile()

Oui c'est sur mais j'ai un gros probleme avec la librairie urlmon.



J'ai l'impression que cette librairie ne fonctionne pas avec Code
Blocks.
Help me !!!!
Christian ASTOR
Le #19637231
On 25 juin, 19:47, Jordan
On 25 juin, 18:18, Jordan
> On 25 juin, 15:58, Christian ASTOR
> > On 25 juin, 12:57, Jordan
> > > Bonjour,
> > > Je cherche un bout de code qui me permettrai de télécharger un fichier
> > > en c++. La seul lib qui semblai simple est plutôt impossible a
> > > installer, UrlMon. Il manque tout le temps un fichier, d'abord
> > > msxml.h, après log4cxx, relou.
> > > Je code avec CodeBlocks une appli win32.

> > Le plus simple est avec URLDownloadToFile()

> Oui c'est sur mais j'ai un gros probleme avec la librairie urlmon.

J'ai l'impression que cette librairie ne fonctionne pas avec Code
Blocks.
Help me !!!!



La lib, c'est urlmon.lib. Les includes plutôt ?
Donc soir tu mets à jour le SDK Windows, soit tu l'appelles
dynamiquement (pas besoin de lib ou include particulier dans ce cas).
Par exemple =>

#define UNICODE
#define _UNICODE

#include #include
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
typedef HRESULT (WINAPI* PUDTF)
( LPUNKNOWN caller,
LPCWSTR szURL,
LPCWSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK callback );

CoInitialize(NULL);
HINSTANCE hDLL = LoadLibrary(TEXT("urlmon.dll"));
if (hDLL)
{
PUDTF pURLDownload = (PUDTF)GetProcAddress(hDLL,
"URLDownloadToFileW");
if (pURLDownload != NULL)
{
HRESULT hr = pURLDownload(NULL, TEXT("http://portfolio.sudpresse.be/
main.php?g2_view=core.DownloadItem&g2_itemId"2378&g2"), TEXT("./
test.jpg"), 0, NULL );
if (SUCCEEDED(hr))
MessageBox(NULL, TEXT("File Downloaded"), TEXT("Information"),
MB_OK | MB_ICONINFORMATION);
}
FreeLibrary(hDLL);
}
return 0;
}
Jordan
Le #19637541
On 25 juin, 19:53, Christian ASTOR
On 25 juin, 19:47, Jordan


> On 25 juin, 18:18, Jordan
> > On 25 juin, 15:58, Christian ASTOR
> > > On 25 juin, 12:57, Jordan
> > > > Bonjour,
> > > > Je cherche un bout de code qui me permettrai de télécharger u nfichier
> > > > enc++. La seul lib qui semblai simple est plutôt impossible a
> > > > installer, UrlMon. Il manque tout le temps unfichier, d'abord
> > > > msxml.h, après log4cxx, relou.
> > > > Je code avec CodeBlocks une appli win32.

> > > Le plus simple est avec URLDownloadToFile()

> > Oui c'est sur mais j'ai un gros probleme avec la librairie urlmon.

> J'ai l'impression que cette librairie ne fonctionne pas avec Code
> Blocks.
> Help me !!!!

La lib, c'est urlmon.lib. Les includes plutôt ?
Donc soir tu mets à jour le SDK Windows, soit tu l'appelles
dynamiquement (pas besoin de lib ou include particulier dans ce cas).
Par exemple =>

#define UNICODE
#define _UNICODE

#include #include
int APIENTRY _tWinMain(HINSTANCE hInstance,
                      HINSTANCE hPrevInstance,
                      LPTSTR    lpCmdLine,
                      int       nCmdShow)
{
        typedef HRESULT (WINAPI* PUDTF)
                ( LPUNKNOWN            caller ,
                LPCWSTR             szURL,
                LPCWSTR             szFileNam e,
                DWORD               dwReser ved,
                LPBINDSTATUSCALLBACK callback );

        CoInitialize(NULL);
        HINSTANCE hDLL = LoadLibrary(TEXT("urlmon.dll"));
        if (hDLL)
        {
                PUDTF pURLDownload = (PUDTF)GetProcAddr ess(hDLL,
"URLDownloadToFileW");
                if (pURLDownload != NULL)
                {
                        HRESULT hr = pURLDownlo ad(NULL, TEXT("http://portfolio.sudpresse.be/
main.php?g2_view=core.DownloadItem&g2_itemId"2378&g2"), TEXT("./
test.jpg"), 0, NULL );
                        if (SUCCEEDED(hr))
                                MessageBo x(NULL, TEXT("File Downloaded"), TEXT("Information"),
MB_OK | MB_ICONINFORMATION);
                }
                FreeLibrary(hDLL);
        }
        return 0;

}



Mon compilo me renvoi une erreur : `LPBINDSTATUSCALLBACK' has not been
declared
Bertrand Lenoir-Welter
Le #19638581
Salut

Si ça peut aider, j'ai écrit un petit exe compilé avec AutoIt qui
télécharge un fichier depuis une URL. Fenêtre minimaliste avec juste une
barre de progression et un bouton "Stop" ; on passe en argument n° 1
l'URL et en n° 2 le nom du fichier sur disque. Inconvénient : c'est un
programme externe, donc à gérer comme tel. Avantage : ça marche. C'est
libre de droits. Tu peux récupérer l'exe depuis
http://www.galaad.net/Download.exe et le code source AutoIt depuis
http://www.galaad.net/Download.au3
Jordan
Le #19638761
On 25 juin, 22:48, Bertrand Lenoir-Welter <bertrand-dot-2008-at-galaad-
dot-net> wrote:
Salut

Si ça peut aider, j'ai écrit un petit exe compilé avec AutoIt qui
télécharge un fichier depuis une URL. Fenêtre minimaliste avec just e une
barre de progression et un bouton "Stop" ; on passe en argument n° 1
l'URL et en n° 2 le nom du fichier sur disque. Inconvénient : c'est u n
programme externe, donc à gérer comme tel. Avantage : ça marche. C' est
libre de droits. Tu peux récupérer l'exe depuishttp://www.galaad.net/ Download.exeet le code source AutoIt depuishttp://www.galaad.net/Download.a u3



Merci mais je préfère quelque chose que je puisse mettre dans mon
code, c'est pour faire la mise a jour d'un logiciel.
Personne ne peu m'aider???
Bertrand Lenoir-Welter
Le #19638861
Jordan :
Merci mais je préfère quelque chose que je puisse mettre dans mon
code, c'est pour faire la mise a jour d'un logiciel.



C'est précisément à ça que ça me sert.
Christian ASTOR
Le #19638981
Jordan wrote:

Mon compilo me renvoi une erreur : `LPBINDSTATUSCALLBACK' has not been
declared



C'est défini dans urlmon.h (ci-dessous)
Mettre à jour le SDK depuis MS et/ou changer de compilo...
Sinon, les autres méthodes simples sont avec IHTMLDocument2, comme dans
la KB292485
ou par Wininet (InternetReadFile() ou FtpGetFile() par FTP)


MIDL_INTERFACE("79eac9c1-baf9-11ce-8c82-00aa004ba90b")
IBindStatusCallback : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE OnStartBinding(
/* [in] */ DWORD dwReserved,
/* [in] */ __RPC__in_opt IBinding *pib) = 0;

virtual HRESULT STDMETHODCALLTYPE GetPriority(
/* [out] */ __RPC__out LONG *pnPriority) = 0;

virtual HRESULT STDMETHODCALLTYPE OnLowResource(
/* [in] */ DWORD reserved) = 0;

virtual HRESULT STDMETHODCALLTYPE OnProgress(
/* [in] */ ULONG ulProgress,
/* [in] */ ULONG ulProgressMax,
/* [in] */ ULONG ulStatusCode,
/* [unique][in] */ __RPC__in_opt LPCWSTR szStatusText) = 0;

virtual HRESULT STDMETHODCALLTYPE OnStopBinding(
/* [in] */ HRESULT hresult,
/* [unique][in] */ __RPC__in_opt LPCWSTR szError) = 0;

virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetBindInfo(
/* [out] */ DWORD *grfBINDF,
/* [unique][out][in] */ BINDINFO *pbindinfo) = 0;

virtual /* [local] */ HRESULT STDMETHODCALLTYPE OnDataAvailable(
/* [in] */ DWORD grfBSCF,
/* [in] */ DWORD dwSize,
/* [in] */ FORMATETC *pformatetc,
/* [in] */ STGMEDIUM *pstgmed) = 0;

virtual HRESULT STDMETHODCALLTYPE OnObjectAvailable(
/* [in] */ __RPC__in REFIID riid,
/* [iid_is][in] */ __RPC__in_opt IUnknown *punk) = 0;

};

typedef __RPC_unique_pointer IBindStatusCallback *LPBINDSTATUSCALLBACK;
Jordan
Le #19639331
On 25 juin, 23:34, Christian ASTOR
Jordan wrote:
> Mon compilo me renvoi une erreur : `LPBINDSTATUSCALLBACK' has not been
> declared

C'est défini dans urlmon.h (ci-dessous)
Mettre à jour le SDK depuis MS et/ou changer de compilo...
Sinon, les autres méthodes simples sont avec IHTMLDocument2, comme dans
la KB292485
ou par Wininet (InternetReadFile() ou FtpGetFile() par FTP)

MIDL_INTERFACE("79eac9c1-baf9-11ce-8c82-00aa004ba90b")
     IBindStatusCallback : public IUnknown
     {
     public:
         virtual HRESULT STDMETHODCALLTYPE OnStartBinding(
             /* [in] */ DWORD dwReserved,
             /* [in] */ __RPC__in_opt IBinding *pib) = 0;

         virtual HRESULT STDMETHODCALLTYPE GetPriority(
             /* [out] */ __RPC__out LONG *pnPriority) = 0 ;

         virtual HRESULT STDMETHODCALLTYPE OnLowResource(
             /* [in] */ DWORD reserved) = 0;

         virtual HRESULT STDMETHODCALLTYPE OnProgress(
             /* [in] */ ULONG ulProgress,
             /* [in] */ ULONG ulProgressMax,
             /* [in] */ ULONG ulStatusCode,
             /* [unique][in] */ __RPC__in_opt LPCWSTR szSta tusText) = 0;

         virtual HRESULT STDMETHODCALLTYPE OnStopBinding(
             /* [in] */ HRESULT hresult,
             /* [unique][in] */ __RPC__in_opt LPCWSTR szErr or) = 0;

         virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetBin dInfo(
             /* [out] */ DWORD *grfBINDF,
             /* [unique][out][in] */ BINDINFO *pbindinfo) = 0;

         virtual /* [local] */ HRESULT STDMETHODCALLTYPE OnData Available(
             /* [in] */ DWORD grfBSCF,
             /* [in] */ DWORD dwSize,
             /* [in] */ FORMATETC *pformatetc,
             /* [in] */ STGMEDIUM *pstgmed) = 0;

         virtual HRESULT STDMETHODCALLTYPE OnObjectAvailable(
             /* [in] */ __RPC__in REFIID riid,
             /* [iid_is][in] */ __RPC__in_opt IUnknown *pun k) = 0;

     };

typedef  __RPC_unique_pointer IBindStatusCallback *LPBINDSTATUSCALLBACK ;



J'ai essayé avec DEV C++, rien ne marche c'est encore pire que code
clocks, j'ai essayé visual studio 2008, il arrive a compiler mais le
programme ne fait rien.
Publicité
Poster une réponse
Anonyme