Что на самом деле делает создание решения с использованием шаблона в Visual Studio по сравнению с пустым проектом? - PullRequest
2 голосов
/ 29 мая 2020

Я следую руководству Молли Рокет «Введение в C», но у меня возникла проблема с запуском следующего кода в отладчике VisualStudio 2019 при использовании параметра «Пустой проект».

Я использую пустой Вариант проекта вместо загрузки шаблона, потому что это то, что использовала Молли, хотя я мог просто загрузить шаблон и запустить код вместо этого, я хотел бы знать, почему я получаю эту ошибку, чтобы я мог лучше понять Visual Studio и C ++.

#include <Windows.h>

void learnC(void) {

    OutputDebugStringA("Test\n");

}

int CALLBACK WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow) 
{
    learnC();
}

Получение ошибки LNK2019, которая совсем не помогает, потому что это просто общий c поймать весь код ошибки.

ошибка LNK2019: неразрешенный внешний символ main упоминается в функции "int __cdecl invoke_main (void)" (? invoke_main @@ YAHXZ)

Я попытался обновить настройки совместимости VS2019, а также другие настройки, которые люди предложили использовать, но ошибка все еще остается.

Опять же, когда я создавал Решение, я использовал пустой документ вместо шаблон, потому что это то, что Молли Рокет использовала при написании этого кода.

Когда я использую шаблон (я использовал шаблон Windows Desktop Application), удаляю весь код и вставляю то, что было в моем оригинале document Я не получаю сообщения об ошибке и хотел бы знать, почему.

Спасибо за ваше время!

1 Ответ

3 голосов
/ 29 мая 2020

Когда вы создаете пустой проект, значение SubSystem по умолчанию равно Console.

enter image description here

Согласно Do c

Приложение, использующее / SUBSYSTEM: CONSOLE; вызывает main (или wmain)

Приложение, использующее / SUBSYSTEM: WINDOWS; вызывает WinMain (или wWinMain), который должен быть определен для использования __stdcall

Насколько я понимаю, вы должны настроить SubSystem на windows ( Свойства -> Компоновщик - > Система -> Подсистема )

enter image description here

Для получения более подробной информации о /SUBSYSTEM (Specify Subsystem), я предлагаю вам обратиться по ссылке: https://docs.microsoft.com/en-us/cpp/build/reference/subsystem-specify-subsystem?view=vs-2019

...