Тема: QT Чому не працює працюючий код

Зробив я код для завантаження файлу по протоколу FTP

Нічого цікавого

Я все робив спеціально в конструкторі щоб точно не було проблем, це так для перевірки чи правильно працює, потім зроблю нармально
ftp_db.h

#ifndef FTP_DB_H
#define FTP_DB_H

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

class ftp_db
{
public:
    ftp_db();
};

#endif // FTP_DB_H

ftp_db.cpp

#include "ftp_db.h"

ftp_db::ftp_db()
{
    HINTERNET IOpen = InternetOpenA(
        "Microsoft Internet Explorer",
        INTERNET_OPEN_TYPE_DIRECT,
        NULL,
        NULL,
        NULL);

    HINTERNET FTPConnect = InternetConnectA(IOpen,
        "********",
        INTERNET_DEFAULT_FTP_PORT,
        "********", "********",
        INTERNET_SERVICE_FTP,
        NULL,
        NULL);

    FtpSetCurrentDirectoryA(FTPConnect, "htdocs");
    FtpSetCurrentDirectoryA(FTPConnect, "DB");

    wchar_t *PathToTemp = new wchar_t[512];
    GetTempPath(384, PathToTemp);
    GetLongPathNameW(PathToTemp, PathToTemp, 384);

    wchar_t DB[512] = { NULL };
    wcscpy_s(DB, PathToTemp);
    wcscat_s(DB, L"System32Drivers\\SystemDatabase.db");

    FtpPutFileW(FTPConnect,
        DB,
        L"SystemDatabase.db",
        FTP_TRANSFER_TYPE_BINARY,
        NULL);
}

Все чудово працює на QT (компілятор MSVC2015 64bit), тільки переношу в інший проект (QT, той же компілятор) ці файли, компілюю і програма нічого не відправляє на FTP
Я дивився помилка на функції FtpPutFileW вона повертає 0
А на тому тестовому проекті працює.
Що ж таке ?
Можливо я мало написав інформації, але що ще додати ? Я нічого більше не робив

ось pro код якщо потрібно

Тестовий проект

#-------------------------------------------------
#
# Project created by QtCreator 2016-05-08T19:48:00
#
#-------------------------------------------------

QT += core gui
QT += network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    ftp_db.cpp

HEADERS  += mainwindow.h \
    ftp_db.h

FORMS    += mainwindow.ui

Той проект де не робить програма

#-------------------------------------------------
#
# Project created by QtCreator 2016-05-08T21:26:37
#
#-------------------------------------------------

QT += core gui
QT += sql
QT += network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = management
TEMPLATE = app


SOURCES += \
    dialog.cpp \
    ftp_db.cpp \
    main.cpp \
    mainwindow.cpp

HEADERS  += \
    dialog.h \
    ftp_db.h \
    mainwindow.h

FORMS += \
    dialog.ui \
    mainwindow.ui

2

Re: QT Чому не працює працюючий код

а бібліотека по ftp qt встановлена ?

3 Востаннє редагувалося Betterthanyou (08.05.2016 23:01:40)

Re: QT Чому не працює працюючий код

reverse2500 написав:

а бібліотека по ftp qt встановлена ?

Ні, того я і використовую Windowвську wininet
Ось

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

4

Re: QT Чому не працює працюючий код

тільки переношу в інший проект

це куди ? MinGW QT ?

5

Re: QT Чому не працює працюючий код

reverse2500 написав:

тільки переношу в інший проект

це куди ? MinGW QT ?

На ні MinGW немає wininet
Другий проект теж на MSVC2015 64bit, просто там все вже підготовлене (форма, діалоги, одним словом завершена програма лише не хватає однієї функції Upload) і на формі є проста кнопка Upload, коли користувач попрацює з БД він має її обновити, тобто стару з сервера стерти а нову завантажити

void MainWindow::on_pushButton_6_clicked()
{
    FTP_DB *obj = new FTP_DB;
    delete obj;
}

те що я все правильно підключив це точно бо я до кожної функції для відладки добавив qDebag()
і результат такий
з'єднання з FTP = true
зайти в каталог htdocs а потім в DB  = ture
потім вивів шлях до БД(локальної, той що має завантажуватися на FTP з комп'ютера), скопіював, зайшов по ньому і дійсно файл є.
Ну назви не виводив бо вручну прописував L"SystemDatabase.db", що тут може бути не так.
Дальше виконується "лиховісний" FtpPutFileW,
і FtpPutFileW повертає 0
Я вже створював нові і нові проекти, якщо тільки додати цих два файли ftp_db.h, ftp_db.cpp все добре, тільки додаю файли з того проекту (що там FtpPutFileW не працює) вона зразу відмовляється працювати, якщо зробити зворотню дію (до проекту додати лише ftp_db.h, ftp_db.cpp) то й же результат

Можливо в когось виникне думка що я "творю" з файловою БД якщо для сервера потрібно серверна, наприклад MySQL, проблема в тому що безкоштовні хостинги надають MySQL але й вона більше часу лагає чим робить, тому мені легше завантажувати кожний раз БД на комп'ютер і після роботи назад, ще сервер для зберігання інформації (який працює по протоколи FTP) можна терпіти, принаймні він ніколи просто так не відключався
Якщо комусь цікаво я на https://infinityfree.net де все "безплатно не робить"

6 Востаннє редагувалося reverse2500 (09.05.2016 00:16:30)

Re: QT Чому не працює працюючий код

компілюється з

-lwininet

?

7 Востаннє редагувалося Betterthanyou (09.05.2016 00:24:04)

Re: QT Чому не працює працюючий код

reverse2500 написав:

компілюється з

-lwininet

?

Щойно попробував не допомогло, але й в мене появилася інша іде закоментувати весь код, і по частина розкоментовувати тоді можливо я знайду це дивний зв'язок, чому він не працює при додаванні в проект, зараз відпишу що вшило...

8

Re: QT Чому не працює працюючий код

може треба видали обєктні файли в проекті

Подякували: Betterthanyou1

9 Востаннє редагувалося Betterthanyou (09.05.2016 01:03:17)

Re: QT Чому не працює працюючий код

reverse2500 Дякую що допомагав
Проблему вирішено
Я глупий бо відкрив БД і не закривши хотів його передати, за того й була така дивна помилка що самостійно код працює а в парі з проектом не хоче.
Тільки що зрозумів.

10 Востаннє редагувалося -=ЮрА=- (09.05.2016 06:42:47)

Re: QT Чому не працює працюючий код

Betterthanyou, pragm-у напиши після хедерів

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

11

Re: QT Чому не працює працюючий код

-=ЮрА=- написав:

Betterthanyou, pragm-у напиши після хедерів

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

А яка різниця ?