Visual Studio 2017 UWP C++で、HttpClientオブジェクトを使ったREST問合せ方法
xaml側でButtonとTextBox・ProgressRingを配置します。ButtonクリックイベントでREST問合せし結果をTextBoxに表示します。 問合せ中はProgressRingを動かすようにします。
<TextBox Name="Edit1" Width="400" Height="300" HorizontalAlignment="Left" Margin="51,120,0,0" VerticalAlignment="Top" Background="Transparent" AcceptsReturn="True" TextWrapping="Wrap" ></TextBox> <Button Content="HttpClient" HorizontalAlignment="Left" Margin="251,450,0,0" VerticalAlignment="Top" Width="200" Height="60" Click="Button_Click_1"/> <ProgressRing HorizontalAlignment="Left" Margin="311,450,0,0" VerticalAlignment="Top" Width="80" Height="60" IsActive="False" Name="ActivityIndicator1" />
コード
Array と WriteOnlyArray (C + + CX) | Microsoft Docs
DataReader によるデータの取得 | Microsoft Docs
C++ での非同期プログラミング - UWP app developer | Microsoft Docs
#include <ppltasks.h> #include <codecvt> void cpp_uwp::json_test::Button_Click_1(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { using namespace Windows::Web::Http; using namespace Windows::Storage::Streams; ActivityIndicator1->IsActive = true; IHttpClient^ NetHttp1 = ref new HttpClient(); concurrency::create_task(NetHttp1->GetAsync(ref new Uri("https://url"))).then([this](IHttpResponseMessage^ res) { concurrency::create_task(res->Content->ReadAsBufferAsync()).then([this](IBuffer^ buf) { DataReader^ BufRead = DataReader::FromBuffer(buf); Platform::Array<unsigned char>^ arr_stream = ref new Platform::Array<unsigned char>(buf->Length); BufRead->ReadBytes(arr_stream); std::stringstream ss1; for (int i = 0; i < buf->Length; ++i) { ss1 << static_cast<char>(arr_stream[i]); } std::wstring_convert<std::codecvt_utf8_utf16<wchar_t> > converter; Edit1->Text = ref new Platform::String(converter.from_bytes(ss1.str()).c_str()); ActivityIndicator1->IsActive = false; }); }); }