Native Development for Windows Phone 8

469 views

Published on

The largest change in the Windows Phone 8 SDK was the addition of support for native code. As a .NET developer you may be turned off by the idea of returning to an unmanaged language, but with the Windows Runtime (WinRT) API, Component Extensions (C++/CX) and C++ 11 support, native development for Windows Phone 8 may be less intimidating then you would think.

In this talk I’ll go over some of the features of C++/CX and show examples of using the native WinRT API in a Windows Phone 8 app.

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
469
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • So why use Native?
    Can anyone tell me some of the reasons why you might want to use Native Code instead of something like C# ?

    Performance is not the main reason
  • Native Development for Windows Phone 8

    1. 1. WAY AHEAD™ Native Development for Windows Phone The Windows Runtime API and Modern C++
    2. 2. 2 »Senior Software Engineer at ALK Technologies »Led development effort to bring CoPilot GPS navigation app to Windows Phone 8 » #4 Free Navigation App in Window Phone store »Windows Phone Dev by day and night » Released 6 of my own apps to Windows Phone store »Blog: www.robwirving.com »Twitter: @robwirving Rob Irving
    3. 3. 3 »History of Native on Windows Phone »Why use Native? »C++ 11 »Windows Runtime (WinRT) »Component Extensions (C++/CX) »Options in Visual Studio »Sample Code »Q & A Agenda
    4. 4. 4 »Lack of Native Development on WP7 hurt the platform » Lack of high-end games available on other platforms » More difficult/impossible to port existing apps from other platforms »Support for Native Development is the single largest change in the WP8 SDK »Native Gaming and Middleware products » Unity 3D, Havok, Cocos 2D, etc. History of Native on Windows Phone
    5. 5. WAY AHEAD™ Why use Native?
    6. 6. 6 »Reusability » Existing code that you don’t want to rewrite » Use of existing 3rd party libraries (SQLite) »Portability » Share code between Windows, iOS and Android » Write once, use it everywhere Why use Native?
    7. 7. 7 »Game development with high-end graphics » Direct3D on Windows and Windows Phone » OpenGL on iOS and Android »Performance » Should not be viewed as the main reason to use C++ » Performance can be better using Native, but is often exaggerated Why use Native?
    8. 8. 8 »Portability & Reusability in action » ~1,000 Lines of C# for WP8 » ~7,000 Lines of new C++ and C++/CX » ~800,000 Lines of existing C++ code »~99% shared code between Windows Phone, iOS and Android! CoPilot GPS – Native Case Study
    9. 9. WAY AHEAD™ A brief introduction to Modern C++ C++ 11
    10. 10. 10 1979 1983 1998 2011 History of C++ C++ began as an enhancement to C at Bell Labs Originally named ‘C with Classes’ Renamed to C++ C++ ISO committee defined C++ 98 No significant changes to C++ for 13 years C++ ISO committee defined C++ 11 New features heavily influenced by managed languages like .NET
    11. 11. 11 »Type inference (auto) » Avoid explicitly declaring the type of a variable » Similar to .NET ‘var’ keyword »Lambdas » Anonymous inline functions C++ 11 Features int num1 = 10; double num2 = 2.5 auto num3 = num1 / num2; std::vector<CityLocation> cities; std::sort(begin(cities), end(cities), [](CityLocation a, CityLocation b) { return a.distance < b.distance; });
    12. 12. 12 »Strongly type enums »Foreach-ish loop C++ 11 Features int numbers[] = {0, 1, 2, 3, 4, 5}; int sum = 0; for(int& number : numbers) { sum += number; } enum class Fruit { Apple, Banana, Orange }; if(meal.Fruit == Fruit::Banana) // do Banana stuff int fruitAbomination = Apple + Orange; // ERROR - Can’t do this anymore
    13. 13. WAY AHEAD™ Windows Runtime API
    14. 14. 14 »Shared API between Windows Phone 8 and Windows Store Apps » Overlaps much of the existing Windows Phone .NET API » Not all APIs are available for both » ~11,000 Windows Runtime » ~2,800 for both » ~600 Windows Phone Runtime Windows Runtime API (WinRT)
    15. 15. 15 »API is a COM-based Native API »Accessible from C#, VB.NET and Component Extensions (C++/CX) » Also Javascript on Windows 8 »API definitions in Windows Metadata (.winmd) files » Similar format to .NET API definitions Windows Runtime API (WinRT)
    16. 16. 16 »Native / Managed Interop » WinRT is the only supported method of interop »The most painful parts of Native /Managed interop are gone with Windows Runtime » No P/Invoke » No Marshalling Native Interop is easy with WinRT
    17. 17. WAY AHEAD™ Component Extensions (C++/CX)
    18. 18. 18 »Syntax and Library abstractions to interact with COM based WinRT API »Much easier to develop for compared to old COM programming Component Extensions (C++/CX)
    19. 19. 19 »Syntactically similar to C++/CLI » ‘ref’ and ‘sealed’ classes » Reference pointers or ‘hats’ ^ Component Extensions (C++/CX) public ref class Foo sealed { }; Foo^ foo = ref new Foo();
    20. 20. 20 »Differences from C++/CLI » No managed CLR » No Garbage Collection, ref counted objects instead » ref new instead of gcnew » Pure C++ classes allowed in C++/CX classes » Global ref ptr’s allowed Component Extensions (C++/CX)
    21. 21. 21 »Properties » No value keyword » Can’t have public get, private set Component Extensions (C++/CX) public ref class Foobar sealed { public: property int Foo; // automatic/trivial property property int Bar { int get() { return _bar; } void set(int newBar) { if(newBar > 0) _bar = newBar; } } private: int _bar; };
    22. 22. 22 »Events » Very similar to .NET events » Unsubscribe using token Component Extensions (C++/CX) MyClass::MyClass() { geoLocator = ref new Geolocator(); // subscribe eventToken = geoLocator->PositionChanged += ref new TypedEventHandler<Geolocator^, PositionChangedEventArgs^>(this, &MyClass::OnPosChanged); } MyClass::~MyClass() { // unsubscribe geoLocator->PositionChanged -= eventToken; } void MyClass::OnPosChanged(Geolocator^ geoLocator, PositionChangedEventArgs^ args) { auto geoPos = args->Position->Coordinate; }
    23. 23. 23 »XAML with Direct 3D Options in Visual Studio
    24. 24. 24 »Several Native Projects available Options in Visual Studio
    25. 25. WAY AHEAD™ Visual Studio Demo
    26. 26. 26 Additional Resources Windows Phone 8 Development Internals (Whitchapel, McKenna) http://amzn.to/1a2989c Modern C++ and Windows Store Apps (Poduri) http://amzn.to/GEW6Y4
    27. 27. 27 »Channel 9 – channel9.msdn.com » Build 2012 Sessions channel9.msdn.com/Events/Build/2012/ » Build 2013 Sessions channel9.msdn.com/Events/Build/2013/ » Going Native channel9.msdn.com/Shows/C9-GoingNative »C++ 11 Features in Visual C++ 11 blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx Additional Resources
    28. 28. 28 »Questions & Answers »Slides will be posted to blog: robwirving.com Thank You!

    ×