2009-09-26 5 views
0

J'ai rencontré un problème lors de la tentative de connexion et de téléchargement d'un fichier sur un serveur FTP.Impossible d'ouvrir une connexion FTP

Voici mon code:

 
#include <windows.h> 
#include <wininet.h> 
#pragma comment(lib, "wininet.lib") 

int main() 
{ 
    HINTERNET hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); 
    HINTERNET hFtpSession = InternetConnect(hInternet, L"myserver.com", INTERNET_DEFAULT_FTP_PORT, L"user", L"pass", INTERNET_SERVICE_FTP, 0, 0); 

    if(FtpPutFile(hFtpSession, L"file.txt", L"file.txt", FTP_TRANSFER_TYPE_BINARY, 0)) 
    { 
     MessageBox(NULL, L"Upload Complete", L"OK", 0); 
    } 
    else 
    { 
     MessageBox(NULL, L"Upload Failed", L"OK", 0); 
    } 

    InternetCloseHandle(hFtpSession); 
    InternetCloseHandle(hInternet); 
    return 0; 
} 

et l'erreur:

svDialog.obj : error LNK2005: "void * hFtpSession" ([email protected]@3PAXA) already defined in MainDlg.obj 
svDialog.obj : error LNK2005: "void * hInternet" ([email protected]@3PAXA) already defined in MainDlg.obj

que je fais mal?

(le code ci-dessus est juste une représentation simplifiée de mon programme réel en utilisant wxWidgets et multithreading)

+0

Pouvez-vous reproduire le problème avec le code exact que vous avez posté ci-dessus? –

+0

Il est trop long que je ne puisse pas le poster ici. :( –

Répondre

2

Il n'y a rien de mal avec le code que vous avez posté. L'erreur du lieur fait référence au symbole redéfini - vous avez deux mêmes variables dans l'espace de noms global, dans deux fichiers objet différents (svDialog et MainDlg). Essayez de ne pas utiliser de variables globales; et si vous devez, et vous avez

HINTERNET hFtpSession; 
HINTERNET hInternet; 

dans l'un de vos têtes, puis préfixer extern, à savoir extern HINTERNET hFtpSesssion; extern HINTERNET hInternet;.

Sinon, et svDialoghFtpSession et hInternet sont des variables complètement différentes, renommez-les dans un de ces fichiers (ou essayez l'espace de noms anonyme).

+0

Merci pour la suggestion.Il a bien fonctionné une fois que j'ai déplacé les deux déclarations HINTERNET à mon MainDlg.cpp et préfixe extern HINTERNET pour les deux variables dans le fichier qui fera la connexion FTP. –

Questions connexes