IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Erreur Connection Wininet


Sujet :

Visual C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut Erreur Connection Wininet
    Bonjour,

    J'ai télécharger sur internet un projet (JFTP) qui gère la réception de fichiers via FTP. Je le compile, aucun problème.
    Ensuite, je l'insère dans un projet MFC, et je ne parviens pas à me connecter sur le serveur FTP.
    Que faudrait-il faire ?

    J'ai identifié le lieu du problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include "stdafx.h"
    #include "global.h"
    
    /* Connexion au serveur FTP */
    boolean ConnexionFTP( char *Serveur, char *Login, char *MotDePasse, DWORD Port )
    {
    	PConnexionInternet = InternetOpen(L"J-FTP", INTERNET_OPEN_TYPE_DIRECT,/* NULL, NULL*/0,0, 0 );
    	if ( PConnexionInternet == NULL ) <-- OK ICI, ne rentre pas
    	{
    		return FALSE;
    		ExitProcess(1);
    	}
      
    	PConnexionFTP = InternetConnect( PConnexionInternet, (LPCWSTR)Serveur, (INTERNET_PORT)Port, (LPCWSTR)Login, (LPCWSTR)MotDePasse, INTERNET_SERVICE_FTP, 0, 0 );
    
    	if ( PConnexionFTP == NULL ) <-- Rentre dedans, donc problème
    	{
    	    InternetCloseHandle( PConnexionInternet );
    	    return FALSE;
    	    ExitProcess(1);
    	}
    
    	return TRUE;
    
    }
    
    boolean changeRepertoire(char* newrep)
    {
        return FtpSetCurrentDirectory(PConnexionFTP,L"ankamagam");
    }
    
    /* Detruit les pointeurs de connection */
    void Deconnexion()
    {
        InternetCloseHandle( PConnexionInternet );
        InternetCloseHandle( PConnexionFTP );
    }
    
    /* DownLoad Fichier */
    boolean DownLoadFile( char *FichierSurFTP, char *FichierACreer )
    {
        return FtpGetFile( PConnexionFTP, (LPCWSTR)FichierSurFTP, (LPCWSTR)FichierACreer, FALSE, 0, FTP_TRANSFER_TYPE_BINARY, 0 );
    }
    
    /* Upload Fichier */
    void UpLoadFile( char *FichierLocal, char *FichierFTP )
    {
        FtpPutFile( PConnexionFTP, (LPCWSTR)FichierLocal, (LPCWSTR)FichierFTP, FTP_TRANSFER_TYPE_BINARY, 0 );
    }
    Le problème pourrait être du au fait que le problème original n'utilise pas UNICODE, alors que moi, je DOIT m'en servir. Mais comme InternetOpen semble fonctionner, je ne pense pas vraiment que le probème vienne de là.

    Quelqu'un aurait-il une solution ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    (LPCWSTR)FichierLocal
    très mauvais.
    Un cast ne convertit pas la chaîne.

    De plus, tu dois plutôt être en TCHAR qu'en WCHAR, ici...

    Conseil : utilise une classe C++ de chaîne pouvant être construite à partir de char et WCHAR (genre, les CString/CStringT de MFC) ou une classe perso faite pour cela...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Mais il exige que je fasse ce cast.
    Et comment faire que mon projet puisse utiliser des wchar ou des tchar ???


    NB : après tests, le problème vient bel et bien du fait que je doive utiliser UNICODE, car j'ai créé un projet "simple" utilisant UNICODE, et je n'arrivait pas à me connecter.
    Et à partir du moment où je lui ai précisé de "Use Multi-Byte Character Set", il a téléchargé.

    Mais je ne peux pas faire cette modif sur ce projet (car si je modifie les paramètres de mon projet, il ne compile plus ). Donc y aurait-il un moyen de finter ??

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Je te l'ai dit : Il faut convertir.

    Si le programme utilise MFC, c'est très simple : Passer par des CString.
    Sinon, il faut définir ou trouver sur le net des classes de chaîne qui font la conversion dans leur constructeur...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Citation Envoyé par Médinoc
    Je te l'ai dit : Il faut convertir.

    Si le programme utilise MFC, c'est très simple : Passer par des CString.
    Sinon, il faut définir ou trouver sur le net des classes de chaîne qui font la conversion dans leur constructeur...

    OK, mais comment include CString ? Quelle classe importer ? Car si je définie une variable "CString s", il me dit qu'il ne connait pas CString.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Donc, c'est que ton programme n'utilise pas MFC.

    Cherche sur codeproject ou codeguru, tu trouveras sûrement des classes de chaînes de caractères qui font la conversion dès le constructeur.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Mon programme est, je pense une "MFC Application", mais comment le vérifier ?
    Peut-on le voir dans les propriétés ?

    Et dans le cas où ce ne serait pas une application MFC, cela changerait-il quelquechose au cast que je dois faire ?

    NB : aurait-ce un rapport avec cette conversion ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    size_t origsize = strlen(wcstombs(file).c_str()) + 1;
    size_t convertedChars = 0;
    wchar_t wcstring[100];
    mbstowcs_s(&convertedChars, wcstring, origsize, wcstombs(file).c_str(), _TRUNCATE);
    wcscat_s(wcstring, L"");// (wchar_t *)");
    wstring caption=loadstring(IDS_EXCEPTION);
    wcstring ne serait-il pas en fait un cstring ?



    Sinon, est-il possible de faire ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char* a = "kcvxwk";
    LPCSTR ab = a;
    le complilateur ne pose aucun problème, mais ceci parait trop simple.

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    En fait la solution est de précisé quelle fonction on veut.
    Par exemple, si on appelle ConnectInternet, wininet a 2 possibilités, ConnectInternetA et ConnectInternetW (pour UNICODE).
    Donc au lieu d'appeler ConnectInternet, il faut appeler ConnectInternetA, et ainsi de même pour toutes les fonctions dont on a besoin dans wininet.

    C'est une solution un peu simple, mais qui fonctionne.

    PS : j'ai fait de même avec winbase.h, et ca marche.

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    wcstring ne peut pas être un CString, puisque c'est déclaré comme un wchar_t[100]...

    Forcer l'utilisation d'un des types de fonction est une possibilité. Mais dans ce cas, je déconseille l'utilisation de la version A de la fonction, sauf si on a la certitude totale que la chaîne sera forcément de l'ASCII pur (pour de l'ASCII étendu, il y a déjà un risque de problème).

    L'idée de base, c'est de tout faire en TCHAR, et de convertir pour ce qui a besoin explicite d'un des types.
    • Si tu n'as pas MFC 7 ou supérieur dans ton projet, tu peux toujours utiliser des std::ostringstream, std::wostringstream, ou std::basic_ostringstream< TCHAR > qui peuvent prendre les deux types de chaîne en insertion (opérateur <<). Mais dans le cas de fonctions critiques en terme de performance, une classe perso (voire même des #ifdef UNICODE) sera préférable.
    • Si tu as MFC 7 ou supérieur, tu peux directement utiliser les types CString, CStringA et CStringW qui font la conversion directement dans leur constructeur.


    Ce qui est sûr, c'est qu'il ne faut pas mélanger en tout cas :
    • Si tu utilises la version A, tu passes des char (LPCSTR s = "abc")
    • Si tu utilises la version W, tu passes des wchar_t (LPCWSTR s = L"abc")
    • Si tu utilises la version TCHAR, tu passes des TCHAR (LPCTSTR s = TEXT("abc") ou LPCTSTR s = _T("abc"))
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PEAR][DB] Erreur : CONNECT FAILED
    Par prog2003 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 20/04/2007, 10h06
  2. Axis : message d'erreur "Connection refused"
    Par lerouxju dans le forum Services Web
    Réponses: 1
    Dernier message: 04/08/2006, 13h56
  3. Erreur connection à une base Mysql avec c#
    Par zidenne dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 24/04/2006, 14h58
  4. Erreur sur Wininet
    Par simoni dans le forum Windows
    Réponses: 4
    Dernier message: 07/10/2005, 16h19
  5. erreur connection postgresql jsp
    Par tatay dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/06/2003, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo