diff --git a/src/main/winrt/SDL_winrt_main.cpp b/src/main/winrt/SDL_winrt_main.cpp index 9cc046de5..b06def8a7 100644 --- a/src/main/winrt/SDL_winrt_main.cpp +++ b/src/main/winrt/SDL_winrt_main.cpp @@ -1,14 +1,36 @@ -//#include "pch.h" +#include -// The app's C-style main will be passed into SDL.dll as a function -// pointer, and called at the appropriate time. +/* The app's C-style main will be passed into SDL.dll as a function + pointer, and called at the appropriate time. +*/ typedef int (*SDLmain_MainFunction)(int, char **); extern __declspec(dllimport) int SDL_WinRT_RunApplication(SDLmain_MainFunction mainFunction); extern "C" int SDL_main(int, char **); -[Platform::MTAThread] -int main(Platform::Array^) +/* Prevent MSVC++ from warning about threading models when defining our + custom WinMain. The threading model will instead be set via a direct + call to Windows::Foundation::Initialize (rather than via an attributed + function). + + To note, this warning (C4447) does not seem to come up unless this file + is compiled with C++/CX enabled (via the /ZW compiler flag). +*/ +#ifdef _MSC_VER +#pragma warning(disable:4447) +#endif + +/* Make sure the function to initialize the Windows Runtime gets linked in. */ +#ifdef _MSC_VER +#pragma comment(lib, "runtimeobject.lib") +#endif + +int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { - return SDL_WinRT_RunApplication(SDL_main); + if (FAILED(Windows::Foundation::Initialize(RO_INIT_MULTITHREADED))) { + return 1; + } + + SDL_WinRT_RunApplication(SDL_main); + return 0; }