Как запустить приложение MFC с нуля? - PullRequest
4 голосов
/ 19 августа 2011

Другими словами из пустого проекта win32 (без мастера).

Здесь я нахожусь:

Определения препроцессора: WIN32

Linker-> System-> Подсистема = Консоль

int _tmain()
{
    int nRetCode = 0;

    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: MFC initialization failed\n"));
        return nRetCode = 1;
    }

    MyWinApp* app = new MyWinApp();

    app->InitApplication();
    app->InitInstance();

    app->Run();

    AfxWinTerm();

    return 0;
}


class MyWinApp: public CWinApp
{
public:
    BOOL InitInstance();

    int Run();
};


BOOL MyWinApp::InitInstance()
{
    return TRUE;
}

int MyWinApp::Run()
{
    return CWinThread::Run();
}

Пропуск CWinApp :: Run (), поскольку он ищет главное окно.

В CWinThread :: Run (), однако, сбой ASSERT_VALID.В верхней части быстрого просмотра для этого написано, что MyWinApp недействителен.

Нужно ли создавать MyWinApp другим способом?

1 Ответ

3 голосов
/ 19 августа 2011

Вы, вероятно, терпите неудачу, потому что вы создаете CWinApp после , который вы называете AfxWinInit.В обычном приложении MFC CWinApp - это глобальная переменная, которая создается до main.Таким образом, когда MFC инициализируется, он имеет действительный глобальный CWinApp на месте.Попробуйте:

MyWinApp* app = new MyWinApp();   // ^moved up^

// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
    // TODO: change error code to suit your needs
    _tprintf(_T("Fatal Error: MFC initialization failed\n"));
    return nRetCode = 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...