无法打开FTP连接

时间:2009-09-26 18:49:30

标签: c++ 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" (?hFtpSession@@3PAXA) already defined in MainDlg.obj
svDialog.obj : error LNK2005: "void * hInternet" (?hInternet@@3PAXA) already defined in MainDlg.obj
我做错了吗?

(上面的代码只是我使用wxWidgets和多线程的真实程序的简化表示)

1 个答案:

答案 0 :(得分:2)

您发布的代码没有任何问题。链接器错误是指重新定义的符号 - 在全局命名空间中,在两个不同的目标文件(svDialog和MainDlg)中有两个相同的变量。

尽量不要使用全局变量;如果你必须,你有

HINTERNET hFtpSession;
HINTERNET hInternet;

在其中一个标题中,然后添加extern,即extern HINTERNET hFtpSesssion; extern HINTERNET hInternet;

如果没有,并且svDialog的{​​{1}}和hFtpSession是完全不同的变量,请在其中一个文件中重命名(或尝试使用匿名命名空间)。