Что такое EntryPoint в AppxManifest.xml для консольных UWP-приложений C ++ / WinRT? - PullRequest
0 голосов
/ 06 декабря 2018

В этом блоге о приложениях командной строки 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, управляемый макросами, или что-то совершенно другое?

1 Ответ

0 голосов
/ 07 декабря 2018

Эти значения манифеста в основном здесь не используются, так что не беспокойтесь об этом.Нет никакой разницы в 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;
}

против

// C++/WinRT
int WINAPI wWinMain(
    _In_ HINSTANCE /*hInstance*/,
    _In_ HINSTANCE /*hPrevInstance*/,
    _In_ LPWSTR    /*lpCmdLine*/,
    _In_ int       /*nCmdShow*/
)
{
    ViewProviderFactory viewProviderFactory;
    CoreApplication::Run(viewProviderFactory);
    return 0;
}
...