2009-09-26 6 views
0

У меня возникла проблема при попытке подключиться и загрузить файл на FTP-сервер.Не удалось открыть FTP-соединение

Вот мой код:

 
#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; 
} 

и ошибка:

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

я делаю неправильно?

(приведенный выше код является лишь упрощенным представлением моей реальной программы с использованием WxWidgets и многопоточности)

+0

Можете воспроизвести проблему с точным кодом, который вы указали выше? –

+0

Слишком долго, что я не могу опубликовать его здесь. :( –

ответ

2

Там нет ничего плохого с кодом вы публикуемым. Ошибка компоновщика относится к переопределенному символу - у вас есть две одинаковые переменные в глобальном пространстве имен, в двух разных объектных файлах (svDialog и MainDlg).

Старайтесь не использовать глобальные переменные; и если у вас есть, и у вас есть

HINTERNET hFtpSession; 
HINTERNET hInternet; 

в одном из ваших заголовков, то предварять extern, т.е. extern HINTERNET hFtpSesssion; extern HINTERNET hInternet;.

Если нет, то svDialoghFtpSession и hInternet - это совершенно разные переменные, переименовать их в один из этих файлов (или попробовать анонимное пространство имен).

+0

Спасибо за предложение. Он работал хорошо, как только я переместил обе декларации HINTERNET на мой MainDlg.cpp и добавлю extern HINTERNET для обеих переменных в файле, который будет выполнять FTP-соединение. –

Смежные вопросы