2
votes

Closest I've found was: Are WinRT Metro apps cross-compatible (x86/64 and ARM)?

I haven't developed any Metro app yet but what I'm trying to understand, if you're developing a Metro App you have to develop against WinRT (Windows Runtime). This is the only way to build a Metro app, weather you do it in JavaScript, C#, or C++, it doesn't matter... So it should all work on ARM... Is it possible to create a Metro app that doesn't work on ARM?

The VLC team are trying to raise money on Kickstarter to develop VLC Player for Windows 8 Metro.

http://www.kickstarter.com/projects/1061646928/vlc-for-the-new-windows-8-user-experience-metro

VLC media player for Windows is currently installed on about 100,000,000 devices worldwide. The existing version runs on Windows 8’s desktop mode, and is available only for Intel-based PCs. This new port will be natively integrated within the new User Experience and will also support ARM-based tablets in a subsequent release

So if they natively integrate with the user experience, i.e making it a Windows 8 App, why would it not work on ARM chips to begin with?

3

3 Answers

6
votes

When you are building C# Metro app you can simply select Any CPU as a target platform (and usually people do so) and build single package for all three platforms. But when you are developing C++ app you need to build a package for every platform separately. It means that you can build your app for x86 and ARM, but not for x64 architecture. You can publish such app and only x86 and ARM users will be able to use it. Of course, the support of all three platforms is good thing, but you can use in your project libraries which were built for only x64 and x86. This will prevent you from creating an ARM version of your app until the ARM ports of such libraries are avaiable. I'm not sure what libraries VLC team is using, but the posibility of such scenario is definitely exists.

3
votes

Theoretically you can (at least in C# and C++ programs) invoke Win32 API functions that are "unsupported". That means this functions will most probably not work on Windows RT. They would work on the full Windows 8 in most cases (though some would cause an exception if invoked). An example is the function GetVersionEx that works under full Windows, but fails the certification and will most probably be not available in Windows RT.

Since it is possible (yet not easy) to install a Windows Store App on Windows 8 skipping the Store it sometimes may make sense to use unsupported functions. I doubt though that it would be possible to install a Windows Store App on an ARM device (Windows RT) without the Store. Because putting an app into the Store need certification having Windows Store Apps that would not run on ARM devices is theoretical. Assuming that certification ensures that apps can run on Windows RT that is of course.

1
votes

With regards to the VLC project, I assume that they have specialized decoder code that uses assembly code or other low-level functionality (maybe GPU acceleration) which will need to be adapted.

"Normal" C++ code should compile on all platforms, too, but as mentioned by @ie. you'll have to setup separate configurations for each platform.