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
Jordan wrote:
Alors je me suis remis sur le truc, j'ai jamais utiliser visual
studio, j'ai un peu du mal.
J'ai le script suivant qui fonctionne :
#include <urlmon.h>
#include <windows.h>
#include <tchar.h>

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
CoInitialize(NULL);
URLDownloadToFile (NULL, TEXT("http://monurl/fichier.ext"), TEXT
("destination.ext"), 0, NULL );

return 0;
}
Maintenant j'aimerai a la place de TEXT("http://monurl/fichier.ext")
et TEXT("destination.ext") mettre quelque chose qui prendrai en compte
les paramètres passé au programme. Jusqu'à maintenant je faisais ca
avec argv mais la il semblerai que ce soit différent



Par exemple =>

TCHAR sArg[260];
lstrcpy(sArg, __argv[1]);
URLDownloadToFile (NULL, sArg, TEXT("destination.ext"), 0, NULL );
Avatar
Jordan
On 26 juin, 18:30, Jordan wrote:
On 26 juin, 12:05, Sylvain SF wrote:
Donc on vas faire comme si rien n'a été écrit au dessus.
Est -t-il possible de faire un logiciel fantôme qui télécharge le
fichier spécifié en paramètre? Si oui est ce possible avec code blo cks
(Ca serai vraiment vraiment cool)?
Merci d'avance.



Si c'est possible comment, car la pour l'instant il y a pas une
personne qui me parle de la même chose, et pour l'instant rien ne
marche.
Donc déjà si je veux quelque chose fantôme, que on ne voix pas de
fenêtre, il faut créer un projet console fenêtre ou autre chose?
En suite, en fonction de ca quel sera le prototype de la fonction
principal, int main, int winmain, autre chose, avec en paramètre quoi,
char* argv[], autre chose?
Après, dans l'instruction URLDownloadToFile je met quoi, argv[x], TEXT
(argv[x]), autre chose?
Merci d'avance.
Avatar
Jordan
On 27 juin, 15:08, Jordan wrote:
On 26 juin, 18:30, Jordan wrote:

> On 26 juin, 12:05, Sylvain SF wrote:
> Donc on vas faire comme si rien n'a été écrit au dessus.
> Est -t-il possible de faire un logiciel fantôme qui télécharge le
> fichier spécifié en paramètre? Si oui est ce possible avec code b locks
> (Ca serai vraiment vraiment cool)?
> Merci d'avance.

Si c'est possible comment, car la pour l'instant il y a pas une
personne qui me parle de la même chose, et pour l'instant rien ne
marche.
Donc déjà si je veux quelque chose fantôme, que on ne voix pas de
fenêtre, il faut créer un projet console fenêtre ou autre chose?
En suite, en fonction de ca quel sera le prototype de la fonction
principal, int main, int winmain, autre chose, avec en paramètre quoi,
char* argv[], autre chose?
Après, dans l'instruction URLDownloadToFile je met quoi, argv[x], TEXT
(argv[x]), autre chose?
Merci d'avance.



S'il vous plait, vraiment besoin d'aide...
Avatar
Christian ASTOR
Jordan wrote:

S'il vous plait, vraiment besoin d'aide...



Ben comme je t'ai dit au-dessus (__argv[1] sous Visual)
(CommandLineToArgvW() également)
Avatar
Jordan
On 27 juin, 19:21, Christian ASTOR wrote:
Jordan wrote:
> S'il vous plait, vraiment besoin d'aide...

Ben comme je t'ai dit au-dessus  (__argv[1] sous Visual)
(CommandLineToArgvW() également)



J'ai essayé avec CommandLineToArgvW(), j'obtiens un warning a la
compilation et un jolie plantage a l'exécution. Voila le warning :
uninitialized local variable 'argv' used
Et voila le code :
#include "stdafx.h"
#include <urlmon.h>


int _tmain()
{
LPCWSTR *argv;
CommandLineToArgvW(*argv, NULL);
CoInitialize(NULL);
URLDownloadToFile (NULL, argv[1], TEXT("test.jpg"), 0, NULL );

return 0;
}
Avatar
Christian ASTOR
Jordan wrote:

int _tmain()
{
LPCWSTR *argv;
CommandLineToArgvW(*argv, NULL);



Avec ce code, heureusement que ça plante !
J'ai l'impression que tu programmes au pifomètre...

Par ex =>

// On obtient les arguments dans le tableau pArgv
int nNbArgs;
LPWSTR* pArgv = CommandLineToArgvW(GetCommandLineW(), &nNbArgs);
Avatar
Jordan
Il semblerai que tout le problème réside dans une simple conversion
char* vers LPCWSTR.
Donc après quelque recherche j'ai fait ceci ;
LPCWSTR *param = wcsdup(A2W(__argv[1]));
URLDownloadToFile (NULL, param, TEXT("test.jpg"), 0, NULL );

Mais A2W est inconnu, normal sinon c'est pas drolle :D. Un .h doit
surement être inclue, mais je ne sais pas encore le quel.
Avatar
Jordan
Je pense etre sur la voie maintenant, mais un probleme est toujours
la, le programme plante. Voila mon code :
int _tmain()
{
LPCWSTR param = NULL;
WCHAR paramwchar[256];
MultiByteToWideChar(CP_ACP, 0, __argv[1], strlen(__argv[1])+1,
paramwchar, sizeof(paramwchar)/sizeof(paramwchar[0])); // Convertion
char* to LPCWSTR
param = paramwchar;
URLDownloadToFile (NULL, param, TEXT("test.jpg"), 0, NULL );

return 0;
}
Avatar
Jordan
Bon j'ai réussit. Deja tout ce qui est _tmain ou APIENTRY _tWinMain
fait planter le programme, donc je suis revenu a mon bon vieux main
comme j'ai toujours fait, et j'ai ajouter un A à URLDownloadToFile, ce
qui fait URLDownloadToFileA, et a partir de la on est en mesure
d'écrire un programme qui marche, soit :
int main()
{
URLDownloadToFileA (NULL, __argv[1], __argv[2], 0, NULL);
return 0;
}

Oulala c'est dur, je me sens trop blazé d'avoir passé 4 jours a
trouver ca. On est loin des 20ene de ligne des codes du début.
Voila. @+ pour de nouvelles aventures...
Avatar
Christian ASTOR
Jordan wrote:

et a partir de la on est en mesure d'écrire un programme qui marche, soit :
int main()
{
URLDownloadToFileA (NULL, __argv[1], __argv[2], 0, NULL);
return 0;
}



Tout est faux.
Mais si tu ne lis pas les réponses...
1 2 3 4