Microsoft has pushed Windows 10 SDK Preview Build 17749 with a bunch of improvements, customizations, and new features. The update will run in conjunction with Windows 10 Insider Build at least 17749. The Build includes multiple bug fixes and under development changes to the API surface area.
You can download Windows 10 SDK Preview Build 17749 from the developer region on Windows Insider website.
Table of Contents
Windows 10 SDK Preview Build 17749 Changes, Bug Fixes, New features Details
Notable stuff
- The current build Windows 10 SDK Preview Build 17749 works in conjunction with just earlier released SDKs and Visual Studio 2017. You are able to install the SDK and even now also carry on with submitting your applications that target 1803 Windows 10 or former to the store.
- The Windows SDK will now formally only be supported by Visual Studio 2017 and greater. You can download the Visual Studio 2017 here.
- This SDK update will install on Windows 10 Insider builds and supported Windows OS.
In order to assist with script access to the SDK, the ISO will also be able to be accessed through the following URL: https://go.microsoft.com/fwlink/?prd=11966&pver=1.0&plcid=0x409&clcid=0x409&ar=Flight&sar=Sdsurl&o1=17749 once the static URL is published.
C++/WinRT Update for Windows 10 SDK Preview Build 17749 and beyond
This update comes up with multiple improvements and fixes for C++/WinRT. Most important, it produces the ability to develop C++/WinRT and doesn’t need dependency on the Windows SDK.This isn’t especially interesting to the OS developer, but even in the OS repo it gives benefits because it does not comprise any Windows headers. Thus, a user will typically pull in less or no dependencies inadvertently. This also indicates a considerable reduction in the amount of macros that a C++/WinRT developer must guard against.
Eliminating the dependency on the Windows headers signifies that C++/WinRT is portable in greater extent and standards compliant. Further, the change shows the efforts of the team to make it a cross-compiler moreover cross-platform library. It also conveys that the C++/WinRT headers will never be minced by macros. If you earlier relied on C++/WinRT to add multiple Windows headers that you will now have to manually include them. It will be better to add headers you depend on explicitly and not rely on a different library to include them for you.
Highlights of Windows 10 SDK Preview Build 17749
The Build Supports get_strong furthermore get_weak to create delegates – This build assents a user apply either “get_strong” or “get_weak” replacing of a raw this pointer when generating a delegate pointing to a member function. This build lets a user apply either “get_strong” or “get_weak” replacing of a raw this pointer when generating a delegate pointing to a member function.
Include async cancellation callback – Oftenly requested feature for C++/WinRT’s coroutine sustenance has been the inclusion of a cancellation callback.
Simplify the use of APIs expecting IBuffer parameters: However, plenty of APIs prefer collections or arrays, adequate APIs rely on IBuffer that it should be simpler to use such APIs from C++. This build gives straightway access to the data behind an IBuffer implementation using the identical data naming convention applied by the C++ standard library containers. This also prevents the collision with metadata names that start with an uppercase letter.
Conformance – Better support for Clang furthermore Visual C++’s stricter conformance modes.
Better code gen – Different improvements for decreasing code size, modifying inlining, and optimizing factory caching.
Eliminate unessential recursion – If the command line indicates to a folder instead of a particular winmd then cppwinrt does not explore recursively for winmd files. This happens when developers inadvertently force cppwinrt to eat more winmds than needed. . In this build, cppwinrt compiler controls duplicates very intelligently. It makes duplicates more resilient to user error and bad winmd files.
Declare both WINRT_CanUnloadNow as well as WINRT_GetActivationFactory in base.h – Callers don’t require to declare them directly. Their signatures have also modified, amounting to a breaking change. The declarations diminish most of the pain of this change. The modification is needed by the fact that C++/WinRT does not depend on the Windows headers and this eliminates the dependency on the types.
Strengthen smart pointers: Strengthen smart pointers – The event revokers did not revoke at the time of move-assigned a new value. This gives us a closure sight of smart pointer classes and we observed that they were not reliably handling self-assignment. This is engrossed in the com_ptr class template that many rely on. The team settled com_ptr and modified event revokers to manage move semantics accurately to confirm that they “revoke upon assignment”. The handle class template has also been strengthened by the elimination of the implicit constructor that made it simple to write wrong code. This also leads bugs in the OS into compiler errors solved in this PR.
Breaking Changes in Windows 10 SDK Preview Build 17749
In the build, supports for non-WinRT interfaces is turned off as built-in configuration. To turn it on just #include <unknwn.h> prior to C++/WinRT headers.
“winrt::get_abi(winrt::hstring)” onwards returns “void*” instead of “HSTRING”. The Code that needs the HSTRING ABI can lucidly use a static_cast.
winrt::put_abi(winrt::hstring) returns void** replacing HSTRING*. The Code that needs the HSTRING ABI can lucidly use a static_cast.
The current build will project GUID as winrt::guid. Code that needs an HRESULT can solely static_cast if you are going to type checking or support type traits, alternatively convertible as long as <unknwn.h> is included first.
The SDK update project GUID as winrt::guid. Code implementing application programming interfaces with “GUID parameters” must apply “winrt::guid” first, but convertible so long as “<unknwn.h>” is included first.
In the SDK Update, the signatures of WINRT_CanUnloadNow and WINRT_GetActivationFactory has a modification. The code should ensure to not declare the functions above and but include winrt/base.h to include their declarations.
The present update made winrt::handle constructor explicit. Code assigning a raw handle value should confirm to call the attach method instead.
winrt::clock::from_FILETIME is deprecated now. Code should apply winrt::clock::from_file_time instead.
New in Windows 10 SDK Preview Build 17749
MSIX Support
The SDK update allows you to package applications as MSIX. You are able to install these apps and run on systems with SDK 17682 build and further.
You should use the MakeAppx tool for the sake of packaging.
MSIX is at present neither supported by the App Certification Kit nor the Microsoft Store.
MC.EXE
The build comes up with some modifications to the C/C++ ETW code generation of mc.exe.
After this build, the “-mof” parameter is now deprecated. This parameter suggests MC.exe create ETW code that is supporting with Windows XP and previous. Microsoft will eliminate support for the “-mof” parameter in a future edition of mc.exe.
So long as the “-mof” parameter is not involved, the output C/C++ header is now supporting with both kernel-mode moreover user-mode. This does not care whether “-km” or “-um” was specified on the command line. The header will apply the _ETW_KM_ macro to itself determine if it is being compiled for either kernel-mode or user-mode. It will call the correct ETW APIs for every mode.
- The only superfluous dissimilarity between “-km” and “-um” is that the EventWrite[EventName] macros created with “-km” comprises an Activity ID parameter. Meanwhile, the EventWrite[EventName] macros generated with “-um” don’t include an Activity ID parameter.
The EventWrite[EventName] macros is onward built-in feature to call either EventWriteTransfer (user mode) or EtwWriteTransfer (kernel mode). Earlier, the “EventWrite[EventName]” macros defaulted to calling either “EventWrite” (user mode) or” EtwWrite” (kernel mode).
- The created header now supports multiple customization macros. For instance, you can configure the MCGEN_EVENTWRITETRANSFER macro when you require the generated macros to call something at variance with EventWriteTransfer.
- The manifest upholds additional attributes.
Event “name”: non-localized event name.
Event “attributes”: additional key-value metadata for an event, for instance, file, line, component, and function name.
Event tags: 28-bit value with user-defined semantics.
Field “tags”: 28-bit value with user-defined semantics (per-field – can be used to “data” or “struct” elements). - You are able to onward define provider traits in the manifest (for example, provider group). When provider traits are applied in the manifest, the EventRegister[ProviderName] macro will itself register them.
- MC will now throw an error if a localized message file is lost a string.
- MC can now onward create Unicode (UTF-8/UTF-16) output with the “-cp utf-8” or “-cp utf-16” parameters.
Known Issues in Windows 10 SDK Preview Build 17749
The SDK headers are created with types in the ABI namespace. This is done to cast conflicts aside with C++/CX and C++/WinRT clients that require to consume types straightway at the ABI layer[1]. With the built-in configuration, types emitted by MIDL are *not* included in the ABI namespace. Although, this has the capability to rise conflicts from teams attempting to utilize ABI types from Windows WinRT MIDL moreover non-Windows WinRT MIDL generated headers.
To confirm that developers have a continuous view of the WinRT Application Programming Interface surface. Validation has been included in the generated headers to ensure that the ABI prefix is persistent between the Windows furthermore user generated headers. If you confront an error such as-
5>c:\program files (x86)\windows kits\10\include\10.0.17687.0\winrt\windows.foundation.h(83): error C2220: warning treated as error – no ‘object’ file generated
5>c:\program files (x86)\windows kits\10\include\10.0.17687.0\winrt\windows.foundation.h(83): warning C4005: ‘CHECK_NS_PREFIX_STATE’: macro redefinition
5>g:\<PATH TO YOUR HEADER HERE>(41): note: see previous definition of ‘CHECK_NS_PREFIX_STATE’
It indicates that a few of your MIDL generated headers are inconsistent with the system created headers.
There are two methods to fix this –
- Preferred way – Compile your IDL file along with the /ns_prefix MIDL command line switch. This will create entire your types to be moved to the ABI namespace consistent furthermore the Windows headers. This may need code alteration in your code, however.
- Alternative way – Add “#define DISABLE_NS_PREFIX_CHECKS” prior to including the Windows headers. This will successfully suppress the validation.
Windows App Certification Kit Crashes
In the current SDK Update (17749), the Windows App Certification Kit will crash. So Microsoft recommends avoiding this by unchecking the option during setup.
API Updates, Additions and Removals
When you target new APIs, think of writing your app to be adaptive so that it can cover the extensive Windows 10 devices.
Source – Windows Developer blog