How to Call the Windows Runtime Component in Standard C++

 

#1 Create a new Win32 Console Project (named it Win32DesktopApp)

 

#2 Change the target platform to Window 10

 

 

 

#3 Add “WindowsApp.lib” to “Additional Dependencies” in Linker -> Input.

 

 

 

Code:

 #include "stdafx.h"
#include <Windows.Foundation.h>
#include <wrl\wrappers\corewrappers.h>
#include <wrl\client.h>
#include <iostream>
#include <sstream>

using namespace std;
using namespace ABI::Windows::Foundation;
using namespace Microsoft::WRL;
using namespace Microsoft::WRL::Wrappers;

int main()
{
   // Initialize the Windows Runtime.
 RoInitializeWrapper initialize(RO_INIT_MULTITHREADED);

  if (FAILED(initialize))
 {
       cout << "Failed to initialize";
  }

   // Get the activation factory for the IUriRuntimeClass interface.
  ComPtr<IUriRuntimeClassFactory> uriFactory;

 HRESULT hr = GetActivationFactory(HStringReference(RuntimeClass_Windows_Foundation_Uri).Get(), &uriFactory);

  if (FAILED(hr))
 {
       cout << "failed to activate the Windows Runtime Class Factory";

      return 0;
   }

   // Create a string that represents a URI.

  HString uriHString;

 hr = uriHString.Set(L"https://www.microsoft.com");

  if (FAILED(hr))
 {
       cout << "failed to wrapper the string";

      return 0;
   }

   // Create the IUriRuntimeClass object.
 ComPtr<IUriRuntimeClass> uri;

   hr = uriFactory->CreateUri(uriHString.Get(), &uri);

   if (FAILED(hr))
 {
       cout << "failed to create a runtime instance";

       return 0;
   }

   // Get the domain part of the URI.
 HString domainName;

 hr = uri->get_Domain(domainName.GetAddressOf());

   if (FAILED(hr))
 {
       cout << "failed to call method get_Domain";

      return 0;
   }

   wprintf_s(L"Domain name: %s\n", domainName.GetRawBuffer(nullptr));

    return 0;
}