Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Telecharger un fichier FACILEMENT en C++

34 réponses
Avatar
Jordan
Bonjour,
Je cherche un bout de code qui me permettrai de t=E9l=E9charger un fichier
en c++. La seul lib qui semblai simple est plut=F4t impossible a
installer, UrlMon. Il manque tout le temps un fichier, d'abord
msxml.h, apr=E8s log4cxx, relou.
Je code avec CodeBlocks une appli win32.
Merci d'avance.

10 réponses

1 2 3 4
Avatar
Christian ASTOR
On 25 juin, 12:57, Jordan wrote:
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()
Avatar
Jordan
On 25 juin, 15:58, Christian ASTOR wrote:
On 25 juin, 12:57, Jordan wrote:

> 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.
Avatar
Jordan
On 25 juin, 18:18, Jordan wrote:
On 25 juin, 15:58, Christian ASTOR wrote:

> On 25 juin, 12:57, Jordan wrote:

> > 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 !!!!
Avatar
Christian ASTOR
On 25 juin, 19:47, Jordan wrote:
On 25 juin, 18:18, Jordan wrote:

> On 25 juin, 15:58, Christian ASTOR wrote:

> > On 25 juin, 12:57, Jordan wrote:

> > > 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 <windows.h>
#include <tchar.h>

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;
}
Avatar
Jordan
On 25 juin, 19:53, Christian ASTOR wrote:
On 25 juin, 19:47, Jordan wrote:



> On 25 juin, 18:18, Jordan wrote:

> > On 25 juin, 15:58, Christian ASTOR wrote:

> > > On 25 juin, 12:57, Jordan wrote:

> > > > 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 <windows.h>
#include <tchar.h>

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
Avatar
Bertrand Lenoir-Welter
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
Avatar
Jordan
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???
Avatar
Bertrand Lenoir-Welter
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.
Avatar
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 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;
Avatar
Jordan
On 25 juin, 23:34, Christian ASTOR wrote:
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.
1 2 3 4