LNK2019 при использовании WinMain в QtCreator

Я делаю графический интерфейс FLTK в QtCreator. Пожалуйста, не сердитесь на меня за то, что я не использую Qt для создания графического интерфейса, это не имеет значения.

В любом случае, мой тип проекта - "Обычный проект C++", и это мой код (вам, вероятно, не нужно его читать, но я поместил его туда на всякий случай):

// include headers
#include <Windows.h>
#include <Fl/Fl.H>
#include <FL/FL_Window.h>
#include <FL/Fl_Button.h>
#include <FL/FL_ask.h>
// macro functions
#define UP(x) UNREFERENCED_PARAMETER(x)
// callback function
void callback(Fl_Widget *sender)
{
    sender->label("Thanks!");
}
// main function
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, 
    int nShowCmd)
{
    // UP's
    UP(hInstance);
    UP(hPrevInstance);
    UP(lpCmdLine);
    UP(nShowCmd);
    // window
    Fl_Window *window = new Fl_Window(250, 250, "Derp Window");
    window->begin();
    // button
    Fl_Button *button = new Fl_Button(10, 100, 230, 25, "Click Me!");
    button->callback(callback);
    // run
    window->end();
    window->show();
    int result = Fl::run();
    // delete ptr's
    delete button;
    delete window;
    // return
    return result;
}

Когда я запускаю это, я получаю это предупреждение и две ошибки (извините за маленькое изображение, просто увеличьте масштаб в браузере, если вы не можете его прочитать):

введите здесь описание изображения

Я знаю, что такое ошибка LNK2019, на самом деле они, вероятно, проклятие моего существования. Но в этом случае я понятия не имею, почему я получаю это. Я думаю, что вы также должны посмотреть на это, это текст для моего файла .pro проектов Qt:

ШАБЛОН = КОНФИГУРАЦИЯ приложения += КОНФИГУРАЦИЯ консоли -= КОНФИГУРАЦИЯ пакета_приложения -= qt

win32: LIBS += -luser32 -lshell32 -lgdi32 -lole32 -ladvapi32

ИСТОЧНИКИ += main.cpp

unix|win32: LIBS += -L$$PWD/../../../Desktop/C++/FLTK/lib/ -lfltk

INCLUDEPATH += $$PWD/../../../Desktop/C++/FLTK/include DEPENDPATH += $$PWD/../../../Desktop/C++/FLTK/include

Это, вероятно, самая важная часть: я никогда не получаю никаких ошибок, и программа работает нормально, когда я использую int main() в качестве основной функции.

Итак, мой вопрос: почему я получаю это, как мне это исправить?


person Aaron    schedule 27.11.2012    source источник
comment
У меня нет решения, но я думаю, что вижу суть проблемы. Вы создаете консольное приложение, а не консоль qt, консоль Windows, поэтому точкой входа является main(), а не WinMain(). Каким-то образом вам нужно сказать ему создать приложение WINDOWS (опция компоновщика: SUBSYSTEM:WINDOWS). Я вижу у вас есть Visual Studio, смотрите в Linker -> System -> Subsystem; Я также зашел в Advanced и вручную изменил точку входа, но я не думаю, что вы хотите этого здесь. Простое указание начать с WinMain() не предоставит все необходимые параметры, такие как HINSTANCE. Я думаю, вам нужно построить/связать правильную ПОДСИСТЕМУ   -  person Mark Stevens    schedule 28.11.2012
comment
Вопрос в том, как указать файлу Qt .pro передать эту опцию в сгенерированный файл Makefile и компоновщику MS.   -  person Mark Stevens    schedule 28.11.2012
comment
На самом деле, я вижу, вы не используете ни один из этих аргументов WinMain() - может быть проще просто позволить ему делать то, что он пытается сделать, и сделать _main() точкой входа.   -  person Mark Stevens    schedule 28.11.2012
comment
@MarkStevens хорошо, я забыл написать это в вопросе (в спешке), но цель использования WinMain вместо main заключалась в том, чтобы он не порождал консоль. Вы знаете, как это сделать в Qt?   -  person Aaron    schedule 28.11.2012


Ответы (2)


Удалить заявление

КОНФИГ += консоль

person John Bandela    schedule 28.11.2012

Я исправил это, создав «Пустой проект Qt» вместо «Консольное приложение C++»!

person Aaron    schedule 29.11.2012