Can old native applications run on Windows8 tablet version? Can old native applications run on Windows8 tablet version? windows windows

Can old native applications run on Windows8 tablet version?


Yes old apps, including unmanaged native apps written with C/C++/Win32 and managed ones in .NET, will run on a Windows 8 tablet fine. Except of course if the tablet is running an ARM processor; then it will only support the new Metro-style apps (and also apps which specifically target the ARM).

In the picture, C/C++ means unmanaged native apps sitting on the WinRT API, which is also unmanaged native. There will be seamless integration with .NET for those that want to use C# or VB.NET.

On your last question, you can't make an application which is compatible to both Metro-style and Desktop ... they are mutually exclusive - you have to make a choice.


WinRT is native code, and C/C++ are native, although their Syntax when used with WinRT looks like C++/CLI. From what I hear, it seems like an API that was designed for C++ rather than C, so it's very object oriented and people seem rather excited.

C# will use the usual way of COM Interop to use WinRT.

To quote Andy Rich (MSFT) from this discussion:

Core WinRT is NOT managed - it is native and COM-based. Our language provides a fully-native projection of that in a high-level syntax, but you aren't tied to that syntax - you will be able to target the Windows Runtime using low-level COM or WRL (an ATL-like template library) as well. (The C#/VB projection is a different story, they generate runtime-callable wrapper objects which marshal between .NET and WinRT.)


C++ in Metro apps is native C++. It is recommended that you use the new language extensions, which look a lot like C++/CLI, and provide a similarly high-level experience - e.g. no need to manually deal with reference counting objects and strings, or implementing and calling QueryInterface - but in pure native code. You don't have to do that, though.

In any case, for your own classes, you can define them in vanilla C++, and compile them to a library. This way, you can share your logic between the desktop version of your app (with UI implemented using MFC, Win32, Qt or whatever) and the Metro version (with UI implemented using WinRT APIs). Similarly, for .NET apps, you can separate logic into a class library that's reused between desktop and Metro.

There's no way to write a single app that will run on both with the same UI layer, neither in C++ nor in .NET. On the other hand, you can approximate that to some extent with HTML/JS, if you avoid using WinRT APIs and stick to HTML5 standard - then you can make a "desktop version" by hosting it in a browser.