とにかくMS提供のサンプルが難しすぎ。C++は0xも含めネタが多すぎて、相当難しすぎように感じます。
「あまりに難解なものはやがて廃れて忘れ去られる」という言葉を思い出しまた。(昔、OLE2の本の厚さにビックりした方の名言)
C#で作成したWindowsRuntime ComponentをC++側から呼び出すサンプルを作りました。async/awaitのさばき方が難解。
C++で作成したライブラリをC#側から呼び出す方が圧倒的に多いと思いますが、、。

以下が簡単過ぎるサンプル。


/////////////////////////////////////////
// C# WindowsRuntime Component

using System;
using System.Threading.Tasks;
using System.Net;
using System.IO;

using Windows.Foundation;
using System.Runtime.InteropServices.WindowsRuntime;

namespace CSRuntime
{
public sealed class MyClient
{
public MyClient() { }
public static string Name(){ return "Namespace is CSRuntime."; }
public string buffer {get;set;}

public IAsyncAction QuerySample()
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/test/inet_test.aspx");
request.Method = "GET";
Task from = request.GetResponseAsync().ContinueWith(t =>
{
HttpWebResponse hwr = (HttpWebResponse)t.Result;
using (StreamReader reader = new StreamReader(hwr.GetResponseStream)))
{
string str = reader.ReadToEnd();
buffer = str;
}
}, TaskContinuationOptions.OnlyOnRanToCompletion);

IAsyncAction to = from.AsAsyncAction();
return to;
}
}
/////////////////////////////////////////
// C++のアプリ

#include
using namespace concurrency;

void Direct2DApp1::DirectXPage::Button_Click_1(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
// String^ nm = CSRuntime::MyClient::Name();

CSRuntime::MyClient^ m = ref new CSRuntime::MyClient();

create_task( m->QuerySample()).then([m,this]()
{

String^ query = m->buffer;

TextBlock^ tx1 = (TextBlock^)this->FindName( "tx1" );
tx1->Text = query;

});
}

とにかく動いたレベルのサンプルです。