C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid,...
Transcript of C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid,...
![Page 1: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/1.jpg)
C++ Component
Extension for WinRT Ale Contenti
Development Manager | Visual C++ | Microsoft
C++ now | may 2012
![Page 2: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/2.jpg)
Agenda
• The Windows Runtime (aka WinRT)
• What is WinRT?
• Design principles (and a bit of history )
• Language “bindings” or “projections”
• WRL and C++/CX
• C++ has two language projections for WinRT
• Differences and goals
• Why two projections?
• ABI, C++, modules and libraries
• An open discussion about library packaging, best practices, problems
![Page 3: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/3.jpg)
Windows Runtime Architecture
Windows
Metadata &
Namespace
Language Projection (Generated from Metadata)
Windows Core
Windows Runtime Core
XAML Storage … Network
UI Pickers Media Controls
Windows 8 “Metro style” app
Runtime Broker
Language
Support (CLR,
WinJS, CRT)
Web Host
(HTML, CSS,
JavaScript))
![Page 4: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/4.jpg)
The Windows Runtime (aka WinRT)
![Page 5: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/5.jpg)
Windows Runtime (WinRT)
• The Windows Runtime is the solid, efficient foundation for
building Windows 8 Metro style apps
• A new API surface which replaces Win32
• Modern, object oriented, easier to use
![Page 6: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/6.jpg)
Windows Runtime (WinRT)
• You’re in early 2010, and you want to revamp the developer
experience for Windows
• What do you do?
![Page 7: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/7.jpg)
Windows Runtime (WinRT)
• You throw away the old “C” style based Win32
• You literally have tens of thousands of APIs with a lot of
duplication. It’s time to cleanup!
• You think hard about the developer experience and the
developer productivity
• IntelliSense, tooling, etc.
• You create a solid, clear, consistent and modern API surface
• Object oriented, namespace organization, async patterns
• You enable all major programming style to easily “bind” to
this API surface
• Native (C++), Managed (think C#, Java), Dynamic (think
JavaScript, Python)
![Page 8: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/8.jpg)
Windows Runtime (WinRT)
• You (Windows) also call up all your friends from Visual
Studio…
• …and you end up putting a bunch of dudes from C++, C#,
CLR, .NET Framework and JavaScript in a room for a couple
of months
• …and, depending on many other factors, you might end up
with something like WinRT
• Ah, you also invent a new string type
![Page 9: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/9.jpg)
WinRT design principles
• Major improvement to developer experience
• Great IntelliSense and tooling
• Native, Managed, Dynamic all first-class citizens
• JavaScript, C#/VB and C++ initial targets
• Platform based Versioning
• Apps keep running on future Windows versions
• Simple low-level constructs; usability in projection
• Responsive and Fluid Apps
• Async APIs where they are needed
• Well-designed, consistent objects
• API surface is clear and consistent
![Page 10: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/10.jpg)
WinRT implementation
• For each WinRT object:
• Interfaces
• No data members
• Factory “construction” pattern
• Described by metadata
• Each language projection can figure out the exact binary
contract just looking at the metadata
• Basic types are well specified
• A very small number of patterns are perused across the API
surface
• Async, Collections, Enumerators/Iterators/Ranges
![Page 11: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/11.jpg)
Shell32.dll
Object
Activation Store Windows Metadata (Disk)
WinRT objects
![Page 12: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/12.jpg)
WinRT Metadata • Efficient binary format derived CLI Metadata
• Profile of ECMA 335, Partition II
• Same structures, different meanings
• Readable by existing tools
• Rich enough to allow multi-language projection generation
• Full IntelliSense on statically known information
Object
C++ App
Pro
jectio
n
Windows
Metadata
Projection
generated by
reading the
metadata
![Page 13: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/13.jpg)
WinRT Basic Types
Basic Types INT32, UINT64, etc. Our usual friends
Strings HSTRING Avoids copying in
multiple languages
Enumerations enum AsyncStatus Flag or non-flag styles
Structures struct Rect; Can contain strings, but
not interfaces
Simple Arrays INT32 [] For very basic
collections
Interfaces IInspectable All methods are defined
as part of interfaces
Generic Interfaces IVector<T> Type-generic interface.
Not extensible
Runtime Class Windows::Storage::
StorageFile
Binds interfaces to make
a class
![Page 14: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/14.jpg)
WinRT Patterns
Collections IVector<T>, IVectorView<T>,
IMap<T>,
IObservableVector<T>
Treat them like STL
collections
(begin()/end()/for()/etc.)
Delegates delegate
AsyncActionCompletedHandler
Encapsulate the context
to call back to an object
Events IApplicationLayout::
LayoutChanged
Lists of callback
recipients
PropertySet interface IPropertySet Collection of items with
varying types
Async
Operation
ReceivePropertiesOperation A way to get a delayed
result without blocking
![Page 15: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/15.jpg)
DEMO
Windows 8
Face Recon demo
![Page 16: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/16.jpg)
WRL and C++/CX
![Page 17: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/17.jpg)
C++ projection(s) • VC++ has two different ways to “project” WinRT metadata,
and thus consume WinRT constructs
• C++/CX (language component extensions)
• WRL (library solution + external tools)
Object
C++ App
WR
L
Windows
Metadata
Projection
generated by
reading the
metadata
C++ App C
++
/CX
![Page 18: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/18.jpg)
WRL – first look
1. #include <wrl.h>
2. #include <wrl\wrappers\corewrappers.h>
3. #include <windows.storage.pickers.h>
4. using namespace ABI::Windows::Storage::Pickers;
5. using namespace Microsoft::WRL;
6. using namespace Microsoft::WRL::Wrappers;
7. ComPtr<IFileOpenPicker> openPicker;
8. HString classid;
9. classid.Set(L"Windows.Storage.Pickers.FileOpenPicker");
10. CHECKHR(ActivateInstance(classid, &openPicker));
11. CHECKHR(openPicker->put_SuggestedStartLocation( PickerLocationId::PickerLocationId_PicturesLibrary));
12. CHECKHR(openPicker->put_ViewMode( PickerViewMode::PickerViewMode_Thumbnail));
![Page 19: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/19.jpg)
WRL
• WRL stands for Windows Runtime Library
• Developed by VC++
• Part of the Windows SDK
• Used by Windows to build basically every WinRT object
offered by Windows 8
• Predates C++/CX and WinRT
• WRL was originally designed as a prototype (called nCOM)
• Modern way to create and consume light-COM objects
• Solve the ABI problem across C++ modules (.dll)
![Page 20: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/20.jpg)
WRL – key characteristics
• No exceptions
• WRL constructs will not throw any exception
• Error codes (HRESULT) are used to return error codes
• Low level library
• Gives developer full control over the WinRT architecture (e.g. out-of-proc servers, etc.)
• Library solution
• Does not require any extension to the C++ language
• Easier to re-target to a different C++ compiler
• Can be used to mix WinRT components and COM components
• Does not hide WinRT and COM complexity
• Heavily templated library (error messages are a beauty… )
![Page 21: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/21.jpg)
WRL – toolchain
• You need to build the “projection” from the metadata
• The compiler is a normal C++ compiler, so it cannot read or
interpret metadata files (.winmd)
• Use winmdidl + midlrt:
winmdidl
midlrt
Acme.winmd Acme.idl
Acme.Utilities.idl
Acme.h
Acme.Utilities.h
![Page 22: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/22.jpg)
WRL – toolchain
1. #include <wrl.h>
2. #include <wrl\wrappers\corewrappers.h>
3. #include <acme.h>
4. using namespace Microsoft::WRL;
5. using namespace Microsoft::WRL::Wrappers;
6. ComPtr<Acme::IWidget> w;
7. HString classid;
8. classid.Set(L“Acme.Widget");
9. CHECKHR(ActivateInstance(classid.Get(), &w));
10. CHECKHR(w->DoSomething());
![Page 23: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/23.jpg)
WRL – under the hood
• Microsoft::WRL::ComPtr is a “modern” COM ref counted
smart pointer
• Classical COM smart pointers are not very safe
• operator& is usually very dangerous
![Page 24: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/24.jpg)
WRL – under the hood
• For example, ATL::CComPtr looks like this:
1. template <class T> 2. class CComPtr 3. { 4. // … 5. T** operator&() throw() 6. { 7. ATLASSERT(ptr_ == NULL); 8. return &ptr_; 9. } 10. protected: 11. T* ptr_; 12. };
• Returning the address to the bare pointer breaks the
encapsulation of the smart pointer class
• Also, it’s hard to get the address of the real CComPtr
![Page 25: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/25.jpg)
WRL – under the hood
• In Microsoft::WRL::ComPtr, operator& returns the helper
class ComPtrRef
1. template <class T> 2. class ComPtr 3. { 4. // … 5. Details::ComPtrRef<ComPtr<T>> operator&() throw() 6. { 7. return Details::ComPtrRef<ComPtr<T>>(this); 8. } 9. protected: 10. T* ptr_; 11. };
• ComPtrRef<ComPtr<T>> can convert to both ComPtr<T>*
and the classic T**
![Page 26: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/26.jpg)
WRL – under the hood
• This way we maintain the usability of the classic T** COM
pattern like: 1. HRESULT get_FileTypeFilter(
__FIVector_1_HSTRING **value);
2. ComPtr<__FIVector_1_HSTRING> filter;
3. CHECKHR(openPicker->get_FileTypeFilter(&filter));
• While enabling the “safer” version: 1. template<typename T>
2. HRESULT ActivateInstance(
3. HSTRING activatableClassId,
4. WRL::Details::ComPtrRef<T> instance) throw();
5. ComPtr<IFileOpenPicker> openPicker;
6. ActivateInstance(classid, &openPicker)
![Page 27: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/27.jpg)
DEMO
WRL
![Page 28: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/28.jpg)
C++/CX – first look
1. #using <Windows.winmd>
2. using namespace Windows::Storage::Pickers;
3. auto openPicker = ref new FileOpenPicker();
4. openPicker->SuggestedStartLocation = PickerLocationId::PicturesLibrary;
5. openPicker->ViewMode = PickerViewMode::Thumbnail;
![Page 29: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/29.jpg)
C++/CX
• C++/CX stands for C++ Component Extensions
• Part of the VC++ compiler (in Dev11)
• Reuse the syntax of ECMA Standard C++/CLI
• Set of language extensions and libraries to allow direct
consumption and authoring of Windows Runtime types
• Strongly-typed system for Windows Runtime
• Automatically reference counted
• Exception-based
• Deep integration with STL
• Well defined binary contract across module boundaries
![Page 30: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/30.jpg)
C++/CX
• No need for external tools
• The compiler can read and understand the metadata:
1. #using <Windows.winmd>
• The metadata in imported “on-demand”
• As the compiler needs definitions for types and constructs from
the metadata, it queries for more data
• This model is superior to processing the entire .h file: The
metadata is easier and faster to query
• The strong reference “^” (read “hat”) is basically a ComPtr
• But the compiler knows the semantics of ^
• And can optimize away redundant AddRef/Release and
QueryInterface
![Page 31: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/31.jpg)
DEMO
C++/CX
![Page 32: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/32.jpg)
Mix it up
• You can use WRL and C++/CX in the same TU
• Most useful when you need to reference some classic COM
components
• e.g. DirectX is still light-COM in Windows 8
• A Platform::Object^ reference is just a pointer to a WinRT
IInspectable interface
1. Windows::Storage::Pickers::IFileOpenPicker^ GetOpenPickerWithWRL() 2. { 3. using namespace ABI::Windows::Storage::Pickers; 4. using namespace Microsoft::WRL;
5. ComPtr<IFileOpenPicker> openPicker; 6. // ... 7. return
dynamic_cast<Windows::Storage::Pickers::IFileOpenPicker^>( reinterpret_cast<::Platform::Object^>( openPicker.Get()));
8. }
![Page 33: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/33.jpg)
Why WRL and C++/CX?
• WRL was initially considered just for internal development in
Windows
• Just before the //build/ conference (in Sept 2011), we
decided to add WRL to the VC++ libraries
• Why? We wanted to target a small set of the C++ dev
population, which might have specific needs (e.g. no
exceptions)
• With the WRL offering, we have a “no compromise” (but also
not that pretty) option for coding against WinRT
![Page 34: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/34.jpg)
C++/CX and WRL comparison
C++/CX WRL
Exception based No exception; HRESULT based
Return value is used in a natural way Return value is reserved for HRESULT
Extensions to C++ language Pure library solution
Reference counted Ref count via smart pointer
Can access low-level pointer Can access low-level pointer
Compact Verbose and complex
No need for external tools Need external tools
Hides COM complexity COM wiring is exposed
• General recommendation is to use C++/CX unless you are in an
exception-free environment.
• WRL can be useful to mix classic COM components and WinRT
components.
![Page 35: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/35.jpg)
ABI, C++, modules and libraries
![Page 36: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/36.jpg)
Libraries packaging
*.hpp
include only
*.hpp
source recompilation
*.cpp
full C++ power
*.hpp
separate compilation
*.dll/*.lib
*.so/*.a
• flat C
• COM?
• metadata?
![Page 37: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/37.jpg)
Libraries packaging
• Include only model
• Full C++ power
• Easy distribution and packaging
• Slower code compilation
• Complexity with large libraries (central state, etc.)
• No code obfuscation
• User can modify the code
• ODR violation problems
![Page 38: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/38.jpg)
Libraries packaging
• Source recompilation model
• Full C++ power
• More complex distribution and packaging (needs to add build
scripts, etc.)
• Faster code compilation (still need to compile at least once
though)
• Easier to maintain large libraries
• No code obfuscation
• User can modify the code
• ODR violation problems
![Page 39: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/39.jpg)
Libraries packaging
• Separate compilation model
• Full C++ power in the separately compiled module “guts”, but must to downgrade to flat “C” for interop
• Medium complexity in distribution and packaging
• Need to have import libs (for .dll)
• Need to redist the .dll/.so
• Faster code compilation
• Easier to maintain large libraries
• Code obfuscation, if needed
• User cannot modify the code
• ODR violation problems are minimized
• We should avoid C++ construct in the .hpp interface: prone to errors, packing mis-alignements, etc.
![Page 40: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/40.jpg)
What do you think?
• Which model do you like most?
• Which model do you use?
• Problems?
• What about the metadata?
• Aren’t we tired of .h/.hpp files?
![Page 41: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/41.jpg)
Questions?
![Page 42: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/42.jpg)
Contacts
• http://blogs.msdn.com/b/vcblog/
• http://channel9.msdn.com/tags/C++/
• http://www.buildwindows.com/
![Page 43: C++ Component Extension for WinRT...Windows Runtime (WinRT) •The Windows Runtime is the solid, efficient foundation for building Windows 8 Metro style apps •A new API surface which](https://reader030.fdocuments.us/reader030/viewer/2022040116/5f093fc57e708231d425ef37/html5/thumbnails/43.jpg)
PARTICIPATE IN C++
DEVELOPMENT USER
RESEARCH
TALK TO GEORGE
GRAB A CARD
MICROSOFT
DEVELOPER
DIVISION
DESIGN
RESEARCH
FILL IT ONLINE AT
http://bit.ly/VSUxResearch
MICROSOFTC++ 2012