Southmountain Ответов: 2

Как составить эту программу "hello world" на visual C++?


Я скомпилировал эту короткую программу "Hello World" в Visual Studio 2017 и потерпел неудачу.
Я использовал консольный тип проекта:

#include <afxwin.h>

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	::MessageBox(NULL, _T("Hello World"), _T("MFC Programming"), MB_OK);
}


Что я уже пробовал:

после изменения на тип Windows со статической связанной конфигурацией MFC он все еще не удался.
Я перепробовал все способы, но ничего не вышло.

Я не могу найти правильную конфигурацию для этой короткой программы в Visual Studio 2017.

Garth J Lancaster

"так и не удалось".&ампер; "его пока не удалось." вам действительно нужно использовать Улучшить вопрос и включите, как он потерпел неудачу и каковы были ошибки - как можно более кратко, но больше информации, которую вы предоставили до сих пор, - это может быть легко или трудно "исправить"

Вы правы в том, что консольный тип программы проекта является неправильным, он не включает в себя достаточно фреймворков, наиболее примечательно MFC, что вам нужно, поэтому я ожидал бы лучшего результата с "MFC static linked" .. не падайте духом, это действительно становится проще .. скорее всего, вы могли бы начать с проекта на основе диалога .. это может помочь https://www.youtube.com/watch?v=WHjJr6Va4cM ..

Richard MacCutchan

Я не думаю, что в этом примере достаточно кода, чтобы сделать программу. Однако, поскольку вы не сказали нам, что происходит, когда вы строите и/или запускаете его, мы не можем предложить никаких предложений.

Кроме того, это не Консольный проект, а приложение Windows MFC.

2 Ответов

Рейтинг:
18

Garth J Lancaster

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

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: Place code here.
    ::MessageBox(NULL, _T("Hello World"), _T("MFC Programming"), MB_OK);

    // Initialize global strings
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_CPQATEST1, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
скомпилирован и запущен, никаких проблем - у меня где-то есть VS2012, я не уверен, что это эквивалентный проект, они продолжают перемещать все варианты вокруг :-(

Обновление 1 : в VS2012 я сгенерировал простое диалоговое приложение MFC и поместил строку ::MessageBox в код OnInitDialog (), и она также запустилась там ..
Обновление 2 : в VS2012, я пошел новый проект -и gt; Приложения -&консольного приложения Win32 и GT; далее -&ГТ; приложение для Windows, поместите линию
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

 	// TODO: Place code here.
	::MessageBox(NULL, _T("Hello World"), _T("MFC Programming"), MB_OK);
и снова никаких проблем.

FWIW (и iirc), ::MessageBox-это функция Win32 API, а не класс/конструкция MFC


Southmountain

вы абсолютно правы. ваш ответ-это то, что я ищу.
миллион раз спасибо!

Рейтинг:
0

Stefan_Lang

Цитата:
Я скомпилировал эту короткую программу "Hello World" в Visual Studio 2017 и потерпел неудачу.
Я использовал консольный тип проекта:

Вы не можете использовать код Windows в консольной программе.
Цитата:
после изменения на тип Windows со статической связанной конфигурацией MFC он все еще не удался.

Изменение типа проекта на что-то другое является сложным и подверженным ошибкам. не стоит идти по этому пути и выяснять, что делать, тем более, что вам, скорее всего, никогда больше не понадобятся эти знания.

Мое предложение: создайте совершенно новый проект Windows с нуля, в другом каталоге проекта. Это даст вам весь код, который вам нужен, за исключением этого MessageBox.

Если вы не можете заставить его работать, вернитесь и сообщите с полной информацией, что происходит не так и какие сообщения об ошибках вы получаете.


Southmountain

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

Stefan_Lang

Обычно достаточно просто опубликовать состояние кода в какой-то момент, и самого первого сообщения об ошибке, которое вы получите для этого конкретного кода, будет достаточно, чтобы мы догадались, что происходит не так.

Однако, если вы испортили настройки вашего проекта, нам становится все труднее понять, что происходит. Поэтому, чтобы избавить вас и всех нас от многих головных болей, пожалуйста, следуйте моему совету, выбросьте свои файлы проекта и создайте новый проект с правильными настройками. Visual Studio создаст большинство файлов и кода, которые вам нужны, и если что-то не сработает, у нас будет гораздо больше шансов помочь вам.