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