Edit

kc3-lang/SDL/src/main/winrt/SDL_winrt_main_NonXAML.cpp

Branch :

  • Show log

    Commit

  • Author : David Ludwig
    Date : 2017-10-24 13:21:11
    Hash : 0e032d58
    Message : WinRT: Move Windows::Foundation::Initialize to SDL2.dll, from SDL_main. This allows C# UWP applications to use SDL2's SDL_WinRTRunApp function. Kudos to Ethan Lee (flibitijibibo@flibitijibibo.com) for the patch. Thanks!

  • src/main/winrt/SDL_winrt_main_NonXAML.cpp
  • /*
        SDL_winrt_main_NonXAML.cpp, placed in the public domain by David Ludwig  3/13/14
    */
    
    #include "SDL_main.h"
    #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
    
    /* 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_WinRTRunApp(SDL_main, NULL);
    }