2009-09-26 150 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

你能和你上面貼確切的代碼重現該問題? – 2009-09-26 18:55:19

+0

我不能在這裏發佈它太長了。 :( – 2009-09-26 19:01:45

回答

2

沒有什麼錯,你已經發布的代碼。鏈接器錯誤是指重新定義的符號 - 在全局名稱空間中,兩個不同的目標文件(svDialog和MainDlg)中有兩個相同的變量。

儘量不要使用全局變量;如果你有,你在你的的一個具有

HINTERNET hFtpSession; 
HINTERNET hInternet; 

,然後在前面加上extern,即extern HINTERNET hFtpSesssion; extern HINTERNET hInternet;

如果不是,並且svDialoghFtpSessionhInternet是完全不同的變量,請在其中一個文件中重命名它們(或嘗試使用匿名命名空間)。

+0

感謝您的建議,它運作良好,一旦我感動兩種HINTERNET申報的,以我的MainDlg.cpp和預先準備的extern HINTERNET的,會做的FTP連接文件中的兩個變量。 – 2009-09-26 19:03:27