Что такое EntryPoint в AppxManifest.xml для приложений UWP консоли C ++ / WinRT?

Это сообщение в блоге о приложениях командной строки UWP говорится: «Исполняемый файл - это имя EXE-файла вашего приложения UWA, а EntryPoint - это полное имя вашего класса приложения».

Это имеет смысл для приложений C #, но как насчет шаблона приложения UWP для консоли C ++ / WinRT ? Единственный код, который у нас есть, таков:

int main()
{
    // You can get parsed command-line arguments from the CRT globals.
    wprintf(L"Parsed command-line arguments:\n");
    for (int i = 0; i < __argc; i++)
    {
        wprintf(L"__argv[%d] = %S\n", i, __argv[i]);
    }

    wprintf(L"Press Enter to continue:");
    getchar();
}

а мейнфест говорит:

...
<Application Id="App"
  Executable="$targetnametoken$.exe"
  EntryPoint="UWPConsoleApp.App"
...

Я назвал проект UWPConsoleApp, так что VS установлен в качестве точки входа, но где этот класс? Компилятор генерирует его, это какой-то непонятный код инициализации vcruntime, управляемый макросами, или что-то совершенно другое?


person ArmsOfSorrow    schedule 06.12.2018    source источник


Ответы (1)


Эти явные значения здесь в основном не используются, так что не беспокойтесь об этом. Нет никакой разницы в Package.appxmanifest для C ++ / CX и C ++ / WinRT.

Отличия при запуске заключаются в вводе вашего кода:

// C++/CX
[Platform::MTAThread]
int __cdecl main(Platform::Array<Platform::String^>^ /*argv*/)
{
    auto viewProviderFactory = ref new ViewProviderFactory();
    CoreApplication::Run(viewProviderFactory);
    return 0;
}

vs.

// C++/WinRT
int WINAPI wWinMain(
    _In_ HINSTANCE /*hInstance*/,
    _In_ HINSTANCE /*hPrevInstance*/,
    _In_ LPWSTR    /*lpCmdLine*/,
    _In_ int       /*nCmdShow*/
)
{
    ViewProviderFactory viewProviderFactory;
    CoreApplication::Run(viewProviderFactory);
    return 0;
}
person Chuck Walbourn    schedule 06.12.2018
comment
Значит, нет скрытого класса WinRT с таким именем, который выполняет некоторую логику инициализации? Хорошо, это то, что я хотел знать, спасибо. - person ArmsOfSorrow; 07.12.2018
comment
Только что проверено, после изменения EntryPoint на случайную тарабарщину приложение по-прежнему запускается правильно. - person ArmsOfSorrow; 07.12.2018