WRL Class Library Project Template
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at WRL Class Library Project Template.
If you use Visual Studio to write a Windows Runtime C++ Template Library (WRL) project, you can greatly simplify your task by downloading the WRL Class Library project template.
Note
If you have to manually update the project settings for an existing project, see DLLs (C++/CX).
Download the WRL Project Template
Visual Studio doesn't provide a template for WRL projects. Here’s how to download a project template that creates a basic class library for Windows 8.x Store apps with WRL.
To download the WRL Project Template
On the menu bar, choose File, New Project.
In the left pane of the New Project dialog box, select Online, and then select Templates.
In the Search online templates box in the upper right corner, type
WRL Class Library
. When the template appears in the search results, choose the OK button.In the Download and Install dialog box, if you agree to the licensing terms, choose the Install button.
After the template installs, create a project by choosing File, New Project, and then selecting the
WRLClassLibrary
template. The project creates a DLL.
Examples that use the project template
Read Walkthrough: Creating a Basic Windows Runtime Component for an example that uses this template to create a Windows Runtime component.
What the project template provides
The project template provides:
an .idl file that declares the MIDL attributes for a basic interface its class implementation. Here’s an example.
import "inspectable.idl"; import "Windows.Foundation.idl"; #define COMPONENT_VERSION 1.0 namespace WRLClassLibrary { interface IWinRTClass; runtimeclass WinRTClass; [uuid(89656677-8679-477c-aff1-f724c64b70f3), version(COMPONENT_VERSION), exclusiveto(WinRTClass)] interface IWinRTClass : IInspectable { } [version(COMPONENT_VERSION), activatable(COMPONENT_VERSION)] runtimeclass WinRTClass { [default] interface IWinRTClass; } }
a .cpp file that defines the class implementation. Here’s an example.
#include "pch.h" #include "WRLClassLibrary_h.h" #include <wrl.h> using namespace Microsoft::WRL; using namespace Windows::Foundation; namespace ABI { namespace WRLClassLibrary { class WinRTClass: public RuntimeClass<IWinRTClass> { InspectableClass(L"WRLClassLibrary.WinRTClass", BaseTrust) public: WinRTClass() { } }; ActivatableClass(WinRTClass); } }
The RuntimeClass base class helps manage the global reference of all objects in the module and declares the methods of the IUnknown and IInspectable interfaces. The InspectableClass macro implements
IUnknown
andIInspectable
. The ActivatableClass macro creates a class factory that creates instances of the class.a file named module.cpp that defines the library exports
DllMain
,DllCanUnloadNow
,DllGetActivationFactory
, andDllGetClassObject
.