| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #include <wrl.h>
- /* At least one file in any SDL/WinRT app appears to require compilation
- with C++/CX, otherwise a Windows Metadata file won't get created, and
- an APPX0702 build error can appear shortly after linking.
- The following set of preprocessor code forces this file to be compiled
- as C++/CX, which appears to cause Visual C++ 2012's build tools to
- create this .winmd file, and will help allow builds of SDL/WinRT apps
- to proceed without error.
- If other files in an app's project enable C++/CX compilation, then it might
- be possible for SDL_winrt_main_NonXAML.cpp to be compiled without /ZW,
- for Visual C++'s build tools to create a winmd file, and for the app to
- build without APPX0702 errors. In this case, if
- SDL_WINRT_METADATA_FILE_AVAILABLE is defined as a C/C++ macro, then
- the #error (to force C++/CX compilation) will be disabled.
- Please note that /ZW can be specified on a file-by-file basis. To do this,
- right click on the file in Visual C++, click Properties, then change the
- setting through the dialog that comes up.
- */
- #ifndef SDL_WINRT_METADATA_FILE_AVAILABLE
- #ifndef __cplusplus_winrt
- #error SDL_winrt_main_NonXAML.cpp must be compiled with /ZW, otherwise build errors due to missing .winmd files can occur.
- #endif
- #endif
- /* The app's C-style main will be passed into SDL.dll as a function
- pointer, and called at the appropriate time.
- */
- extern __declspec(dllimport) int SDL_WinRT_RunApplication(int (*)(int, char **));
- extern "C" int SDL_main(int, char **);
- /* 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)
- {
- if (FAILED(Windows::Foundation::Initialize(RO_INIT_MULTITHREADED))) {
- return 1;
- }
- SDL_WinRT_RunApplication(SDL_main);
- return 0;
- }
|