Windows 10 Store ready sample of MinGW dll with C exported methods PInvoked from Windows 10 UWP application
- UWP appx bundle with MinGW dll passing Windows 10 Store Certification Kit checks
- Tested for x64 only
- Tested with MinGW-w64 64 bit compiler installed with MSYS2 toolchain
- Sample based on implementation of WinRT support for libVLC
Environment requirements:
Visual Studio 2017
withUWP development tools
and"C++ Universal Windows Platform development tools"
package installedx86_64 MSYS2
installation with configuredpacman
packager. Latest MinGW-w64 compiler build obtained withpacman
packager by running following command in MSYS2 terminal:
pacman -S mingw-w64-x86_64-toolchain
- MinGW-w64
winstorecompat
library to redefine some forbidden API calls for UWP platform.winstorecompat
library is available in latest builds of MinGW-w64 and can be obtained along with x86_64-toolchain MSYS2 MinGW toolchain as described above.
Build steps:
- To build DLL launch MSYS2 MinGW-w64 64 bit compiler command line.
- cd to
MinGWDLL
directory - Run
build.sh
script to build MinGW dll. In background script does following things:- Creates custom
gcc
specfile to linkwinstorecompat
library before linking to system libraries. Replaces linking withmsvcrt
(Desktop Microsoft C runtime) with linking tomsvcr120_app
(Visual Studio 2013 UWP platform C runtime).msvcr120_app
is bundled along with installation of MinGW-w64 compiler. - Asks
gcc
to build sharedPureMinGWDLL.dll
library with custom flag-Wl,--dynamicbase
to pass Windows 10 Store Certification Kit security checks. - Runs
appcontainer.pl
script to modifyPE header
ofPureMinGWDLL.dll
binary. It setsappcontainer
bit flag to be compatible with Windows 10 Store binary requriements.
- Creates custom
InvokeMinGWDllUWP
directory contains Visual Studio 2017 UWP project to PInvokePureMinGWDLL.dll
shared library and display obtained values on screen. To build just launchInvokeMinGWDllUWP.sln
with Visual Studio 2017 and run the Build. UWP solution referencesMicrosoft Visual C++ 2013 Runtime Package for Windows Universal
to be bundled into appx package.